我试图将动态内存分配给结构元素并获得分段错误

时间:2016-12-20 09:15:52

标签: c

我正在尝试将动态内存分配给数组元素,但我遇到了分段错误 这是代码:

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

struct Octstr
{
      unsigned char *data;
      long len;
      long size;
      int immutable;
};
int main()
{
    struct Octstr *obj;
    obj->data = (char*)malloc(16);
    return 0;
}

3 个答案:

答案 0 :(得分:2)

您没有为struct本身分配内存:obj未初始化。

代码的行为未定义。

malloc提供一些内存或使用自动存储持续时间:

struct Octstr obj;
obj.data = (char*)malloc(16);

最后,不要忘记通过调用malloc来平衡free来电。 (也没有必要在C中强制转换malloc的返回指针,并检查返回指针值以检查分配是否成功。)

答案 1 :(得分:0)

struct Octstr *obj;是未初始化的变量,它存储未指定的地址,因此指向未指定的位置。

通过尝试访问成员来取消引用它是未定义的行为,在您的情况下会导致分段错误。

答案 2 :(得分:0)

用NULL初始化所有指针。确保在代码末尾使用指针后释放它。