ABA


"שאלה בC, שחרור זכרונות"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #10588 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 10588
איציק2
חבר מתאריך 26.4.08
2436 הודעות
   22:53   30.01.12   
אל הפורום  
  שאלה בC, שחרור זכרונות  
 
   ערכתי לאחרונה בתאריך 30.01.12 בשעה 22:57 בברכה, איציק2
 
היי,
אממ אז ככה, קיבלתי שורה עם רווחים הייתי צריך להעביר אותה לstruct מסוים, בין רווח לרווח יש בעצם מילה שצריכים להקצות לה זיכרון מסוים ולהכניס אותה למקום המתאים, בעצם המבנה הוא כזה:

struct words {
int n;
char **w;
};

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

void freeAll (struct words * word)
{
int t;
for (t = 0; t < word.n; t++)
free (word->w);
free (word.w);
free(word);
return;
}

עריכה : מוזר אבל הוא לא רושם לי את הT, למעלה בFOR כתוב word->w[t , לא יודע למה הוא לא מציג את זה בהודעה..


הבעיה שאני מקבל שגיאה כשאני מגיע לריצה של הלולאת FOR, הקטע שאני רואה בדיבגר שקיימת את המילה ואני בעצם נותן את הכתובת הראשונה וזה לא עובד, לא יודע למה מה הולך שם פשוט לא עובד..
הרי אם אני משחרר את המערך של הפויינטרים אז זה לא ישחרר לי את כולם נכון?
לפי מה שהבנתי צריך לשחרר את כל המילים (כי כל מילה במערך משלה) אחת אחת ורק אז את המערך של הפויינטרים ורק בסוף את המערך הראשי,
לא עובד, למה??

תודה !


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  תעלה את כל הקוד VeNom  31.01.12 00:31 1
     תודה, הנה הקטע קוד המלא: איציק2 31.01.12 11:27 2
         לא התעמקתי אבל משהו בולט: D-KinG 31.01.12 12:26 3
             וי, לא שמתי לב, אני יבדוק עכשיו יש מצב זה הבעיה.. איציק2 31.01.12 13:05 4

       
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק
   00:31   31.01.12   
אל הפורום  
  1. תעלה את כל הקוד  
בתגובה להודעה מספר 0
 
   כולל את הקוד שביצעת את ההקצאות של הזכרון.
בקשר לסוגרים המרובעים,יש לך בצד ימין(מתחת לסמיילים) "המרת סוגריים מרובעים"(שתכתוב הודעה).


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
איציק2
חבר מתאריך 26.4.08
2436 הודעות
   11:27   31.01.12   
אל הפורום  
  2. תודה, הנה הקטע קוד המלא:  
בתגובה להודעה מספר 1
 
   ערכתי לאחרונה בתאריך 31.01.12 בשעה 11:32 בברכה, איציק2
 

struct words* arrange (char A[])
{
int size = strlen(A);
int i, j = 0, t = 0;
int count = 0;
struct words * word = NULL;
char temp [SIZE];

word = (struct words*) calloc (1,sizeof(struct words));

for (i = 0; i < size; i++)
if (A[i] == ' ')
word->n++;
word->n++;

word->w = (char **) calloc (word->n, sizeof(char));
if (!word->w)
{
free(word);
printf("Error");
exit(0);
}
for (i = 0; i < (word[0].n); i++)
{
while (A[j] != ' ')
{
if (A[j] == '\0')
break;
temp[t] = A[j];
j++;
t++;
}
j++;
temp[t] = '\0';
t = 0;
word->w[i] = (char *) calloc (strlen(temp), sizeof(char));
if (!word->w[i])
{
for (t = 0; t < i; t++)
free(word->w[i]);
free (word->w);
free(word);
}
strcpy(word->w[i], temp);
}

return word;
}// arrange func


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
D-KinG
חבר מתאריך 8.6.02
3490 הודעות
   12:26   31.01.12   
אל הפורום  
  3. לא התעמקתי אבל משהו בולט:  
בתגובה להודעה מספר 2
 
  

word->w = (char **) calloc (word->n, sizeof(char));

צריך להיות


*word->w = (char **) calloc (word->n, sizeof(char));


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
איציק2
חבר מתאריך 26.4.08
2436 הודעות
   13:05   31.01.12   
אל הפורום  
  4. וי, לא שמתי לב, אני יבדוק עכשיו יש מצב זה הבעיה..  
בתגובה להודעה מספר 3
 
   ערכתי לאחרונה בתאריך 31.01.12 בשעה 13:11 בברכה, איציק2
 
עריכה : תודה רבה פתר את הבעיה, לא הבנתי למה זה לא עבד D:


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net