我正在尝试将动态内存分配给数组元素,但我遇到了分段错误 这是代码:
#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;
}
答案 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初始化所有指针。确保在代码末尾使用指针后释放它。