在测试文档中,我发现我被问到以下代码中的问题是什么:
#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;
int main()
{
char* a = (char*) malloc (20);
char* b = (char*) malloc (20);
strcpy(b, "Secure Coding");
strcpy(a, "Insecure Coding");
a = b;
cout << a << endl;
cout << b << endl << endl;
free(a);
free(b);
return 0;
}
这是什么?
答案 0 :(得分:9)
a=b;
此作业 a 指向与 b 相同的位置(&#34;安全编码&#34;)。您已经丢失了对 a 指向的初始位置的任何引用,因此基本上&#34;不安全的编码&#34;是无法释放的垃圾。
另一个问题是你将两次相同的指针释放出来。第一次免费后,你不再拥有那段记忆。
请参阅:What happens when you try to free() already freed memory in c?