glibc检测到内存损坏

时间:2011-03-19 06:36:58

标签: c++ glibc

我有以下功能。

129 string cmdline::compile_sOpt(const cl_option *options)
130 {
131    assert(options != MEM0x0);
132 
133    string sOpt;
134    int i =0;
135    while(options[i].lo_name != MEM0x0){
136       sOpt += options[i].so_name;
137       if(options[i].has_arg == required_argument ||
138          options[i].has_arg == optional_argument)
139             sOpt += GC_GETOPT_ARG;
140       ++i;
141    }
142 
143    return sOpt;
144 }

返回此功能时会出现以下错误。

*** glibc detected *** ./a.out: malloc(): memory corruption: 0x000000000133c1a0 ***

我已经注释掉了所有代码,并编写了以下内容,错误仍然存​​在。

string s;
return s;

so_name和GC_GETOPT_ARG都是const char。 在gdb中,sOpt永远不会保存值。

提前致谢。

编辑: 谢谢你的指点。我想出了错误,我很惭愧地说我做到了。但错误是在数组末尾的memset。

1 个答案:

答案 0 :(得分:1)

你可能已经破坏了堆栈或堆。该错误表明它更可能是堆,但不能保证堆栈损坏不是原因。在调用此函数之前发生了损坏。

Update0

  在数组末尾

memset

这是一个经典的腐败案例,会导致这种情况,我怀疑你已经在堆中损坏它的区域完成了这个。下次调用mallocfree将导致程序在检测到问题时终止。