robicon פורסם 2012 בספטמבר 25 Share פורסם 2012 בספטמבר 25 אני רוצה לבנות מערך בגודל 5 מסוג של struct שה struct יהיה רשימה מקושרת.זאת אומרת שבכל תא במערך תהיה רשימה מקושרת ואני מסתבך עם הזיכרון....עשיתי malloc למערך ואין לי בעיה להכניס לשם ערכים הבעיה שלי שאחר כך אני כבר לא מצליח להמשיך את הרשימה.לדוגמה הכנסתי לתא 0 ערכים ואחר כך אני רוצה להכניס ערכים לnode הבא בתא 0 אני לא מצליח איך אני אמור לבנות את זה מבחינת זיכרון?תודה קישור לתוכן שתף באתרים אחרים More sharing options...
QttP פורסם 2012 בספטמבר 25 Share פורסם 2012 בספטמבר 25 רשימה מקושרת בונים דינמית - מקצים כל איבר ואיבר בנפרד.בוא תתחיל בצורה מסודרת. תגדיר את הstruct. תגדיר את המערך ותאתחל אותו. משם תמשיך קישור לתוכן שתף באתרים אחרים More sharing options...
robicon פורסם 2012 בספטמבר 25 מחבר Share פורסם 2012 בספטמבר 25 typedef struct flights{ int flight_num; int flight_day; int flight_month; int f_hour,f_minuts,f_seconds; int p; int from; int des; flights *next;}list[4];הגדרתי ב mainflights *f_list[4]={0}; qעכשיו אני שולח לפונקציה שמקבלת מערך מסוג flights ומקבלת flights אני בודק אם הרשימה בתא שאני צריך להכניס אליו היא NULL אם כן אני אמור לעשות malloc לתא הזה ואז בעזרת memcpy להעתיק את המבנה לרשימה.... זה עובד אבל כאשר אני עושה malloc לתא אחד שאר התאים נעלמים...לא יודע למה קישור לתוכן שתף באתרים אחרים More sharing options...
QttP פורסם 2012 בספטמבר 25 Share פורסם 2012 בספטמבר 25 שיש לך כפילות וקצת בלאגן.הגדרת טיפוס list שהמשמעות שלו הוא מערך של struct flights בגודל 4. לא ברור למה עשית את זה ככה, כי אתה גם לא משתמש בטיפוס list בהמשך.אחר-כך שים לב שf_list הוא לא מערך של flight אלא מערך של מצביעים לflights. האם זה מה שרצית? קישור לתוכן שתף באתרים אחרים More sharing options...
robicon פורסם 2012 בספטמבר 25 מחבר Share פורסם 2012 בספטמבר 25 בקשר ל list מחקתי אותו...הבעיה עכשיו זה פשוט שאני שולח את ה f_list לפונקציה מופיעה לי רק רשימה אחת ולא 5 (במערך) שזה משהו שאף פעם לא נתקלתי בובקשר למצביעים...כן (לא בסדר?) קישור לתוכן שתף באתרים אחרים More sharing options...
QttP פורסם 2012 בספטמבר 25 Share פורסם 2012 בספטמבר 25 אם אתה לוקח פונקציה שמקבלת (לדבריך) מערך של flights ושולח לה מערך של מצביעים לflights, מן הסתם לא תקבל התנהגות נכונה.כדי שלא ננסה לנחש, יותר פשוט שתכתוב פה גם את הפונקציה וגם כיצד אתה קורא לה ומה אתה מעביר. קישור לתוכן שתף באתרים אחרים More sharing options...
robicon פורסם 2012 בספטמבר 25 מחבר Share פורסם 2012 בספטמבר 25 #include <stdio.h>#include <stdlib.h>#include <string.h>#define DEST 4#define TEL_AVIV 0#define LONDON 1#define ROME 2#define ZURICH 3#define PARIS 4#define B747 1#define DC10 2#define B707 3typedef struct flights{ int flight_num; int flight_day; int flight_month; int f_hour,f_minuts,f_seconds; int p; int from; int des; flights *next;};void add_flight(flights f,flights *list[] ){ if(f.flight_day<0||f.flight_day>7||f.flight_month<0||f.flight_month>12){ printf("date erorr-exit the program"); exit(0); } if(f.f_hour<0||f.f_hour>24||f.f_minuts<0||f.f_minuts>59||f.f_seconds<0||f.f_seconds>59){ printf("time erorr-exit the program"); exit(0); } if(list[f.from]==NULL){ list[f.from]=(flights*)malloc(sizeof(flights)); memcpy(list[f.from],&f,sizeof(f)); return; }}int main(){ flights *f_list[4]; flights one={123,3,4,12,32,22,B747,TEL_AVIV,PARIS,NULL}; flights two={125,2,1,12,35,22,B747,TEL_AVIV,LONDON,NULL}; add_flight(one,f_list); add_flight(two,f_list);}עדיין לא סיימתי את הפונקציה אני כרגע רק מנסה שמה שכתבתי יעבוד... אני לא מבין למה הפונקציה לא מקבלת את המערך? זה מכניס לתא הראשון קישור לתוכן שתף באתרים אחרים More sharing options...
robicon פורסם 2012 בספטמבר 26 מחבר Share פורסם 2012 בספטמבר 26 הסתדרתי בסוף במימוש אחר.תודה. קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.