假设我有一个结构:
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))
我的代码在执行此操作时会出现分段错误。
我想知道为什么会失败以及在什么情况下会有什么原因?
答案 0 :(得分:2)
calloc和memset将内存归零的方式有什么不同吗?
没有。实际上,calloc可能会在内部调用memset。
我想知道为什么会失败以及在什么情况下会有什么原因?
没有。你有一个calloc参数的顺序错误,它应该是calloc(1, sizeof(global_struct));
。虽然在这种情况下,参数的排序实际上并不重要。
我的代码在执行此操作时会出现分段错误。
问题很可能在代码的其他地方。
答案 1 :(得分:0)
可能会有所不同。在vms系统上,可能发生的空闲时间之一是空闲列表中的页面可以归零,并移动到归零的空闲列表,这样可以隐藏该calloc背后的一些成本。你的milage可能会有所不同。