【问题标题】:sigsev error on malloc that's driving me nutsmalloc 中的 sigsegv 错误让我抓狂
【发布时间】:2012-08-05 23:55:19
【问题描述】:

这段 C 代码在 gdb 中给出了分段错误

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;

在执行时,如果我在 gdb 中添加一个断点,就在这段代码的 sn-p 之前(它只是另一个 printf() 语句),则值为

(gdb) p seq_subphases
$3 = 88
(gdb) p seq_entry_action
$4 = (int **) 0x0

然后我按下一步,它在 malloc 处出现段错误

我真的不明白......

【问题讨论】:

  • 这通常是因为您损坏了堆。这意味着错误可能几乎在您的代码中的任何位置。试试valgrind
  • 在 centos 6.2 和 gcc 4.4.6 版下运行那段代码,它编译并运行良好,这意味着你在某个地方损坏了堆。
  • +1 是今天在 SO 上第一个不使用 malloc 返回值的人。
  • 你能在Valgrind下运行你的程序吗?
  • 确实是这样......一个错误计算 sizeof() 的早期 malloc 是这个 malloc 失败的原因。

标签: c gdb segmentation-fault malloc


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-12-25
    • 2010-11-19
    • 1970-01-01
    • 2010-12-29
    • 2011-05-09
    • 2014-05-19
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多