עבור לתוכן

dynamic struct אני רוצה להגדיר מידע דינמי שישמר ב struct ב C++ (יש קטע קוד)

Featured Replies

פורסם


struct data1
{

int size ;
char *Data1 ;
char Data2[1000] ;

};



int _tmain(int argc, _TCHAR* argv[])
{

data1 mydata ;

mydata.Data1 = (char *) malloc(100*sizeof(char));
printf("size of data is %d",sizeof(mydata));
int stam=getchar() ;

return 0;
}

הגודל שאני יקבל זה 1008 כאשר אני יריץ את הקוד האם יש דרך להגיר שגם הפוינטר הראשון DATA1 יכניס גם בגודל של ה STRUCT או שזה חייב להיות סטטי .

פורסם

sizeof על מצביע מחזירה את גודל המצביע, לא את הגודל של מה שהוא מצביע עליו.

באותה צורה, אם המבנה מחזיק מצביע, אז sizeof של המבנה יכלול את הגודל של המצביע (שהוא 4), לא משנה על מה הוא מצביע.

פורסם
  • מחבר

אני יחדד את השאלה שלי ...

הכוונה שאני היצלחתי לחבר ל STRUCT זיכרון של 1000 ביטים סטטים וזה מוכל בגודל הסטקט

השאלה שלי עם אני יכול לעשות זאת עם גודל דינמי .

האי למעשה גם DATA 1 ו DATA 2 מצבעים ו זיכרון של DATA2 ממש מוכל בגודל ה סטרקט

למה אני לא יכול להכיל גם זיכרון דינמי לסטרקט ...

ו

פורסם

אי אפשר לדעת את הגודל של זכרון שהוקצה אחרי שהוא הוקצה. אתה צריך בשביל זה לשמור את הגודל שלו במשתנה נוסף.

פורסם
  • מחבר

שוב אני יחזז את השאלה ...

1000 ביטים של DATA2 מכולה בגודל של הסטרקט

עכשיו יודע ש גם DATA1 וגם DATA2 הם סך הכול פוינטרים שניתן לגשת עלהם ...

למה DATA2 הסטרקט שומר את הזיכרון של DATA 2 כחלק מהסטרקט ואילו DATA1 זה לא קח האי שינהם הם פוינטרים לא ?

פורסם

DATA2 הוא לא פוינטר. הוא מערך סטטי, שהגודל שלו ידוע בזמן הקומפילציה. זה ההבדל ביניהם.

הפונקציה sizeof פשוט מחזירה את הגודל של הטיפוס בזכרון. היא לא טורחת לעקוב אחרי מצביעים, פשוט כי זה לא המטרה שלה.

בזכרון עצמו, אובייקט מהטיפוס הזה ייראה ככה:

| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | ... | 1007 |
| <-- size --> | <-- Data1 --> | <---------- Data2 ---- ... -----> |

כלומר 4 הבתים הראשונים שמורים ל-size, ארבעת הבתים הבאים שמורים ל-Data1, ו-1000 הבתים הבאים ל-Data2.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים