如何在c中的函数中为内存中的结构指针分配内存

时间:2017-12-02 13:05:41

标签: c pointers memory

我正在尝试使用一个函数来为结构指针分配内存,但是当程序到达执行该操作的代码行时,程序会以无响应的姿态进入。我尝试了一切,但我无法弄清楚自己。我是C的新手。这是代码:

#include <stdio.h>
#include <stdlib.h>

struct elem
{
     struct elem *node;
    int a;
};


void aloc(struct elem **p,int a)
{
     *p=(struct elem*)malloc(sizeof(struct elem));
    (*p)->a=a;
    (*p)->node=NULL;
}
int main()
{
    typedef struct elem E;
    E *p;
    aloc(p,5);
    printf("%d",p->a);


    return 0;
}

1 个答案:

答案 0 :(得分:2)

aloc(p,5);您需要传递结构指针的地址。你传递结构指针本身。

<强>解决方案 aloc(&p,5)

几点:执行检查malloc的返回值。如果它失败了你就不会遇到错误。 (如果你尝试访问它会返回NULL - 它将是Undefined行为)。

你正在施放malloc - 不要这样做。这会导致许多问题。

使用完毕后,还可以自由动态分配。

还尝试阅读编译器提供的警告。它有助于。 (在启用所有警告的情况下编译程序)