بسم الله الرحمن الرحيم
السلام عليكم يا شباب
انا احاول تعلم لغة C وفي الحقيقة واجهتني مشكلة وهي كالأتي:
قمت بإنشاء بنية struct وسميتها Rect وهي تحتوي على اربع متغيرات :
typedef struct
{
int x,y;
int w,h;
} Rect;انا اريد إنشاء مصفوفة تحتوي على مؤشرات Rect حتى استطيع ان استخدمها كمعاملات من خلال الدوال
ولكي استطيع ان اعالجها بسهولة.
المشكلة :
المشكلة اني كلما حاولت ان احجز ذاكرة للمتغيرات و اخزن مؤشرها في المصفوفة احصل على خطاء وينهار البرنامج
الكود التالي للتوضيح:
int t_size = 20;
Rect* list[t_size];
int i=0;
while(i<20)
{
if( (list = malloc(sizeof(Rect)) == NULL) )
{
printf("\nError in malloc");
exit(1);
}
i++;
}وحتى لو كتبت الكود بالصيغة التالية فإنه لن يعمل:
int t_size = 20;
Rect* list[t_size];
int i=0;
list[0] = malloc(t_size * sizeof(Rect*));
while(i<20)
{
if( list == NULL )
{
printf("\nError in malloc");
exit(1);
}
i++;
}الكود بالكامل :
#include<stdio.h>
typedef struct
{
int x,y;
int w,h;
} Rect;
void SetRect(Rect** r, int size);
int main()
{
int t_size = 20;
Rect* list[t_size];
int i=0;
list[0] = malloc(t_size * sizeof(Rect*));
while(i<20)
{
if( list == NULL )
{
printf("\nError in malloc");
exit(1);
}
i++;
}
SetRect(list, t_size);
i = 0;
while(i<t_size)
{
printf("\nRect[%d]->x:%d\tRect[%d]->w:%d", i, list->x, i, list->h);
i++;
}
getch();
return 0;
}
void SetRect(Rect** p, int sz)
{
int i=0;
int j=sz;
Rect* pRect;
while(i<j)
{
pRect = p;
pRect->x = 2*i;
pRect->y = 3*i;
pRect->w = 1+i;
pRect->h = 6+i;
i++;
}
}