נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: מתקדמים - הקצאות זיכרון דינאמיות

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
אבידור
משתמש חבר
משתמש חבר
סמל אישי

הצטרף / הצטרפה: 11 October 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 162
נשלח בתאריך: 20 October 2005 בשעה 09:52 | IP רשוּם
ציטוט אבידור

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

הצטרף / הצטרפה: 13 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 1194
נשלח בתאריך: 20 October 2005 בשעה 13:12 | IP רשוּם
ציטוט SBD

שפה?

__________________
~ Nobody Is Perfect, I'm Nobody ~
פורומים
חזרה לתחילת העמוד הצג את כרטיס החבר של SBD חפש הודעות אחרות של SBD בקר בדף הבית של SBD
 
אבידור
משתמש חבר
משתמש חבר
סמל אישי

הצטרף / הצטרפה: 11 October 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 162
נשלח בתאריך: 20 October 2005 בשעה 16:48 | IP רשוּם
ציטוט אבידור

C
חזרה לתחילת העמוד הצג את כרטיס החבר של אבידור חפש הודעות אחרות של אבידור
 
SBD
פורומיסט על
פורומיסט על
סמל אישי

הצטרף / הצטרפה: 13 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 1194
נשלח בתאריך: 20 October 2005 בשעה 23:52 | IP רשוּם
ציטוט SBD

קוד:
void main()
{
 int    **A;

 A = allocate_mat(x,y);

 // EXAMPLE:
 A[0][0] = 1;

 free_mat(A, x, y);
}

int **allocate_mat(int a, int b)
{
   int m, o;
   int **mat;

   /* allcoate array of pointers */
   mat = (int**)malloc(sizeof(int*)*a);
   if (mat == NULL) return NULL;

   /* allocate the rows */
   for (m = 0; m < a; ++m)
   {
      mat[m] = (int*)malloc(sizeof(int)*b);

      /* if no memory to allocate row, free everything till now */
      if (mat[m] == NULL)
      {
         for (o = 0; o < i; ++j) free(mat[o]);
         free(mat);
         return NULL;
      }
   }
   return mat;
}


/* free the memory in the end */
void free_mat(int **mat, int a, int b)
{
   int m;
   if (mat == NULL) return;
   for (m = 0; m < a; ++m) free(mat[m]);
   free(mat);
}

מקווה שזה מספיק מובן?



__________________
~ Nobody Is Perfect, I'm Nobody ~
פורומים
חזרה לתחילת העמוד הצג את כרטיס החבר של SBD חפש הודעות אחרות של SBD בקר בדף הבית של SBD
 
אבידור
משתמש חבר
משתמש חבר
סמל אישי

הצטרף / הצטרפה: 11 October 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 162
נשלח בתאריך: 21 October 2005 בשעה 10:36 | IP רשוּם
ציטוט אבידור

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

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 3296
נשלח בתאריך: 21 October 2005 בשעה 11:51 | IP רשוּם
ציטוט ניר

^ אני מכיר ת'קוד הזה 

__________________
מספר האייסיקיו שלי ו/או כתובת ה-MSN שלי אינם מהווים מוקד תמיכה
חזרה לתחילת העמוד הצג את כרטיס החבר של ניר חפש הודעות אחרות של ניר בקר בדף הבית של ניר
 
SBD
פורומיסט על
פורומיסט על
סמל אישי

הצטרף / הצטרפה: 13 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 1194
נשלח בתאריך: 21 October 2005 בשעה 14:08 | IP רשוּם
ציטוט SBD

חחחחחח....אכן :)

[ז"א ניר הביא לי את הקוד הזה שאני הייתי צריך :), ניתן כרדיט פעם הבאה P;]



__________________
~ Nobody Is Perfect, I'm Nobody ~
פורומים
חזרה לתחילת העמוד הצג את כרטיס החבר של SBD חפש הודעות אחרות של SBD בקר בדף הבית של SBD
 
אבידור
משתמש חבר
משתמש חבר
סמל אישי

הצטרף / הצטרפה: 11 October 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 162
נשלח בתאריך: 24 October 2005 בשעה 18:17 | IP רשוּם
ציטוט אבידור

טעות:
קוד:

      /* if no memory to allocate row, free everything till now */
      if (mat[m] == NULL)
      {
          for (o = 0; o < i; ++j) free(mat[o]);
          free(mat);
          return NULL;
      }

המשתנה I בכלל לא קיים. צריך להחליף אותו ב A - העמודות, שישחרר כל עמודה ( או שורה? ) וגם למה מקדמים את J - שגם לא קיים? זה לולאה אין סופית! צריך להחליף את J ב O בקיצר הקוד הנכון:
קוד:

      /* if no memory to allocate row, free everything till now */
      if (mat[m] == NULL)
      {
          for (o = 0; o < a; ++o) free(mat[o]);
          free(mat);
          return NULL;
      }

חזרה לתחילת העמוד הצג את כרטיס החבר של אבידור חפש הודעות אחרות של אבידור
 
ניר
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 3296
נשלח בתאריך: 24 October 2005 בשעה 18:59 | IP רשוּם
ציטוט ניר

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

__________________
מספר האייסיקיו שלי ו/או כתובת ה-MSN שלי אינם מהווים מוקד תמיכה
חזרה לתחילת העמוד הצג את כרטיס החבר של ניר חפש הודעות אחרות של ניר בקר בדף הבית של ניר
 
אבידור
משתמש חבר
משתמש חבר
סמל אישי

הצטרף / הצטרפה: 11 October 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 162
נשלח בתאריך: 24 October 2005 בשעה 19:43 | IP רשוּם
ציטוט אבידור

:-(
אבל איך אין לך טעות אם המשתנים שאתה משתמש בהם לא קיימים?
חזרה לתחילת העמוד הצג את כרטיס החבר של אבידור חפש הודעות אחרות של אבידור
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 24 October 2005 בשעה 20:37 | IP רשוּם
ציטוט shoshan

באמת מאיפה הבאתם את i,j,x,y

__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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