在C中动态分配结构

时间:2012-12-03 13:02:35

标签: c memory dynamic struct allocation

我遇到动态内存分配问题。这是代码所以请帮助。

#include <stdio.h>
int i;

typedef struct{
  int A;  
}node;


typedef struct Model
        {                            
            node *m;    
        } Model;
        Model M;

void initialize(Model *a, int size)
{
    a->m = (node*) malloc(size);
}


void model_init(Model *a, int len)
{
    int i;
    for (i=0;i<len;i++) a->m[i].A = 20;
}


int main()
{
initialize(&M ,10);
model_init(&M, 10);
for (i=0;i<10;i++) printf("%d\n",M.m[i].A);
}

我正在尝试制作一个有10个节点的模型,我想为变量A中的节点赋值.printf显示(-1819044973,-1819044973,14128019,3969,0,0,0 ......)< / p>

我只想说它例如 M.m [2] .A = 20

我做错了什么?请帮忙。

TY

3 个答案:

答案 0 :(得分:7)

void initialize(Model *a, int size)
{
    a->m = (node*) malloc(sizeof(node) *size); // NOTICE HERE!!!!
}

答案 1 :(得分:4)

您的initialize函数分配了多个字节,然后model_init假设许多节点实例可用。 node大于1个字节(至少是sizeof(int)字节),因此您可以在已分配内存的末尾写入。

最简单的解决方法是更改​​initialize

void initialize(Model *a, int elements)
{
    a->m = malloc(elements * sizeof(node));
}

答案 2 :(得分:1)

有关您不必投射malloc这一事实的更多信息: Do I cast the result of malloc?