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

标签 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;
}

最佳答案

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

解决方案 aloc(&p,5)


几点:检查malloc的返回值。万一失败,您将不会遇到错误。 (如果您尝试访问它返回 NULL - 这将是未定义的行为)。

并且您正在转换 malloc - 不要这样做。这会导致很多问题。

还可以在完成使用后释放动态分配的对象。

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

关于c - 如何在c中的函数中为结构指针分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47608210/

相关文章:

c - 在 C 中实现 Miller-Rabin

c - 我需要将一个字符串分成三个不同大小的部分

python - python静态方法是否比实例方法消耗更少的内存

c - 如何知道服务器数据传输完成

c - 指针和函数外部分配或静态变量和内部分配?

C++ 通过引用传递单个元素数组 - 这是事实吗?

c++ - 如何使用多指针写入 ProcessMemory

c - 为什么 realloc 不缩小数组?

memory - cvShowImage和Kinect SDK的内存问题:骨架查看器

c - stm32中断标志与中断挂起位