עבור לתוכן

שאלה על הקצאה דינמית ב-C

Featured Replies

פורסם

שלום אנשים

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

מישהו? איך נפתרים מהזבל

ptr[i]=(char*)malloc((size)*sizeof(char));
if (!ptr[i])
cout<<"error";
for(int j=0;j<size;j++)

[br]פורסם בתאריך: 18.07.2008 בשעה 20:11:07


שכחתי שורה אחרונה
ptr[i][j]=input[j];

פורסם

איך הגדרת את ptr?

פורסם

זכרת שמחרוזות ב-C חייבות להסתיים ב-'0\'? שים לב שאתה צריך בשביל זה להקצות מקום אחד יותר מאורך המחרוזת.

פורסם
  • מחבר

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

פורסם

למה שלא תשתמש בNEW וDELETE במקום בMALLOC וFREE

פורסם

את ה-0\ זכרת להעתיק לדו מימדי?

פורסם

למה שלא תשתמש בNEW וDELETE במקום בMALLOC וFREE

א. מה זה משנה?

ב. delete ו-new הם אופרטורים של ++C. אם הוא כותב ב-C, הוא צריך להשתמש ב-malloc ו-free.

פותח הת'רד - יעזור מאוד אם תעלה גם את הקוד שבו אתה קורא את המחרוזות, והקוד שבו אתה מדפיס אותן.

פורסם

הוא רשם פשוט COUT (תחביר של C++) ולכן הצעתי לו new ו delete

פורסם

צודק, לא שמתי לב לזה. פותח הת'רד צריך להחליט אם הוא עובד ב-C או ++C. שעטנז כזה זה לא בריא :)

פורסם

זה שאתה מקצה אחד יותר לא משנה כלום.

ההקצאה של C פשוט משאירה בזכרון המוקצה את מה שהיה בו קודם, כלומר, זבל.

כל עוד אתה לא מאפס את התו האחרון כלומר

ptr[i][size - 1] = 0

אין לך כל אפשרות לדעת מה יש באותו מיקום, והפונקציה cout תדפיס את המידע בזכרון עד שתגיע לתא שערכו (במקרה כנראה) 0.

פורסם
  • מחבר

תודה אחי עזרת לי מאוד..

ארכיון

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

דיונים חדשים