【问题标题】:Dynamic allocation of structs in CC中结构的动态分配
【发布时间】:2012-12-03 13:02:34
【问题描述】:

我遇到了动态内存分配问题。这是代码,请帮忙。

#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 ...)

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

我做错了什么?请帮忙。

TY

【问题讨论】:

  • 您的代码有泄漏。我没有看到 free() 对应的 malloc
  • 为什么要在全局范围内声明主局部变量?

标签: c memory dynamic struct allocation


【解决方案1】:
void initialize(Model *a, int size)
{
    a->m = (node*) malloc(sizeof(node) *size); // NOTICE HERE!!!!
}

【讨论】:

    【解决方案2】:

    您的initialize 函数分配了一些字节,然后model_init 稍后假定许多节点实例将可用。 node 大于 1 字节(至少 sizeof(int) 字节),因此您写入超出分配内存的末尾。

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

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

    【讨论】:

      【解决方案3】:

      有关您不必强制转换 malloc 的更多信息: Do I cast the result of malloc?

      【讨论】:

        猜你喜欢
        • 2010-12-31
        • 1970-01-01
        • 2014-08-22
        • 2012-03-10
        • 1970-01-01
        • 2021-12-03
        • 2015-07-23
        • 2020-11-28
        • 1970-01-01
        相关资源
        最近更新 更多