看一下代码:
void repl(char** str) {
// build a new string (simulating find&replace)
char* replacement = (char*)malloc(7);
strcpy(replacement, "my ass");
// this causes "free(): invalid pointer" crash
//free(*str);
*str = replacement; // return to caller
}
/* main function */
int main (int argc, char **argv) {
// out original string
char* str = "memory leak here";
repl(&str); // replace something 1st time
repl(&str); // 2nd time
repl(&str); // 3rd time
printf("%s\n",str); // look at output
exit(0);
}
当“免费”到位时,您将获得以下内容:
*** glibc detected *** ./test: free(): invalid pointer: 0x0000000000401013 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x7eb96)[0x7f264e7ecb96]
....
如果没有free
,会出现内存泄漏(valgrind输出):
==26236== LEAK SUMMARY:
==26236== definitely lost: 14 bytes in 2 blocks
==26236== indirectly lost: 0 bytes in 0 blocks
==26236== possibly lost: 0 bytes in 0 blocks
==26236== still reachable: 7 bytes in 1 blocks
==26236== suppressed: 0 bytes in 0 blocks
我对指针还不是很熟悉,请耐心等待。 也许这不是最好的方法,所以请建议更好的查找和替换方法,以避免内存泄漏。
我尝试只返回结果,但是同样出现了内存泄漏。