SIGSEV错误的驾驶我坚果
问题描述:
的C代码,此位是在gdb给分割错误SIGSEV错误的驾驶我坚果
if ((seq_entry_action=malloc((seq_subphases)*sizeof(int*)))==NULL){
printf("Cannot allocate memory for seq_entry_action\n");
}
其中:
int **seq_entry_action=NULL;
unsigned int seq_subphases=0;
在执行的时间,如果我添加一个断点在代码片段(它只是另一个printf()语句)之前的gdb中,值为
(gdb) p seq_subphases
$3 = 88
(gdb) p seq_entry_action
$4 = (int **) 0x0
然后I p RESS未来它出现segfaults在malloc的
我真的不明白这一点.....
答
样子,确实......计算错误的sizeof早期的malloc()是这样的malloc失败的原因。
这通常是因为你损坏了你的堆。这意味着错误可能只是在您的代码中的任何地方。尝试'valgrind'。 – Mat 2012-08-08 19:36:44
在centos 6.2和gcc版本4.4.6下运行那些代码,它编译并运行良好,这意味着某处损坏了你的堆。 – 2012-08-08 19:38:37
+1是今天第一个没有投入malloc返回值的SO。 – 2012-08-08 19:40:14