שאלה קטנה - ...

arik23m

New member
שאלה קטנה - ...

- בשפת C- איך אני עושה הקצאת זיכרון דינמית עבור מטריצה. ידוע לי גודל המטריצה רק במהלך התוכנית. נניח שאני יודע שגודלה הוא N עמודות על M שורות. אני יודע שצריך להגדיר מצביע דו מימדי ועליו לעשות את ההקצאה, המצביע יצביע על תחילת המטריצה (איבר 1,1 ) אבל כיצד אני מבצע בפועל את ההקצאה. אנא עזרתכם המהירה והיעילה, תודה. אריק.
 

gilad_no

New member
עד כמה שזכור לי,

int x=10; int y=20; int *p=new int[y][x]; for (b=0;b<y;b++) for (a=0;a<x;a++) p[a]=0; delete[] p;

מקווה שלא התבלבלתי...
 

ברנדל

New member
הערות:

א. דיברו על C ב.
int *p=new int[y][x];​
זו טעות לא ניתן להמיר מצביע למערך-בלוק של 20 ל מצביע ל int צריך לכתוב
int (*p)[20] = new int[10][20];​
p[10][20]. זה אומר: p מצביע לאיבר הראשון (ה אפס), במקרה שלנו האיבר הזה הוא בעצמו מצביע לבלוק מערך של 20 (ולא ל int הראשון שנמצא)
 

yoash17

New member
אתה צריך לעשות את זה ככה

להגדיר פוינטר בצורה הזאת: int ** pointer ואז לבצע הגדרה של מערך של פוינטרים לפי הגודל של n בצורה הזואת: pointer =(int **)malloc(sizeof(int *)*n); ואז לעבור על כל תא במערך שהקצעתה ולהגדיר אותו כמערך בגודל m for(int i=0;i<n;i++) { pointer = (int *)mallloc(sizeof(int)*m); } וזהו אחרי כל זה אתה יכול לפנות למערך הדו מימדי בצורה רגילה. שים לב לשחרר את הזיכרון בסוף קודם כל משחררים כל מערך שהוקצע ורק בסוף את מערך הפוינטרים. בהצלחה
 

arik23m

New member
רק רציתי לומר תודה לכל המשיבים. אז.

. (ועוד כמה מילים לטובת הקפצה.)
 
למעלה