我有以下功能。
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。
答案 0 :(得分:1)
你可能已经破坏了堆栈或堆。该错误表明它更可能是堆,但不能保证堆栈损坏不是原因。在调用此函数之前发生了损坏。
在数组末尾
memset
这是一个经典的腐败案例,会导致这种情况,我怀疑你已经在堆中损坏它的区域完成了这个。下次调用malloc
或free
将导致程序在检测到问题时终止。