【发布时间】:2013-09-10 06:13:17
【问题描述】:
假设我有一个结构:
typedef struct
{
int a;
struct x;
struct *x2;
char *s;
}global_struct;
我有一个指针指向的内存等于结构的大小:
ptr = calloc(sizeof(global_struct),1);
我实际上不想在堆上分配内存,所以 id 将结构的变量声明为:
global_struct var_struct1;
我正在使用 memset 将内存初始化为零。
memset(&var_struct1,0,sizeof(var_struct1))
当我这样做时,我的代码给出了分段错误。
我想知道这是否会失败以及在什么情况下会失败?
【问题讨论】:
-
你从来没有在你的问题中
malloc。你错过了什么吗? -
显示的代码应该可以正常工作。如果您正在执行显示的操作,那么 Segfault 来自其他地方,不在显示的代码中。
-
这是代码中唯一的区别。我已对其进行了修改以显示更多详细信息
-
作为旁注,标准预见的初始化变量的构造是初始化器,
= { 0 }在您的情况下就足够了。在具有非全位零的空指针的怪异架构上,这可能是唯一正确的方法。在这样的架构上calloc或memset是不正确的。 -
var_struct1是一个对返回其地址的函数具有局部作用域的变量吗?
标签: c malloc heap-memory stack-memory calloc