2012-08-08 62 views
7

的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的

我真的不明白这一点.....

+11

这通常是因为你损坏了你的堆。这意味着错误可能只是在您的代码中的任何地方。尝试'valgrind'。 – Mat 2012-08-08 19:36:44

+1

在centos 6.2和gcc版本4.4.6下运行那些代码,它编译并运行良好,这意味着某处损坏了你的堆。 – 2012-08-08 19:38:37

+11

+1是今天第一个没有投入malloc返回值的SO。 – 2012-08-08 19:40:14

回答

1

样子,确实......计算错误的sizeof早期的malloc()是这样的malloc失败的原因。