malloc调试......需要解决方案

时间:2014-11-09 13:09:23

标签: c malloc

typedef struct nodes* nods;
        struct nodes
            {
                int field,grammi,stili,flag1,flag_gv,height;
                nods d,r,l,u;
            };

。 。

int j;

         struct nodes kefelement[30];
        kefelement=(nods)malloc(30*(sizeof(struct nodes)));
            for ((j=0); (j<30); j++)   
               {
                kefelement[j].r=NULL;
                kefelement[j].d=NULL;
                kefelement[j].grammi=j+1;
                kefelement[j].stili=j+1;
                kefelement[j].field=0;
                kefelement[j].u=NULL;
                kefelement[j].l=NULL;
                kefelement[j].flag1=0;
                kefelement[j].flag_gv=0;
                kefelement[j].height=0;

            }

问题在于malloc ....有人请帮帮我!!!!

1 个答案:

答案 0 :(得分:0)

struct nodes kefelement[30];
kefelement = (nods)malloc(30*(sizeof(struct nodes)));

kefelement是一个数组。编译器将分配可通过名称kefelement访问的内存区域。请注意,此名称不是可以为其分配新值的指针。但是,在表达式中使用kefelement将(除了一些例外)将名称转换为指向其第一个元素的指针。

如果要为数组分配动态内存,则需要将其声明为指针:

struct nodes *kefelement;
kefelement = (nods)malloc(30*(sizeof(struct nodes)));

或更好:

kefelement = malloc (30 * sizeof *kefelement);

无论指针指向什么,最后一个版本都会自动分配正确的内存量。 C中不需要(nods)强制转换。