带指针的C ++漏洞问题

时间:2016-05-23 17:03:56

标签: c++ security memory-leaks

在测试文档中,我发现我被问到以下代码中的问题是什么:

#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;
}

这是什么?

1 个答案:

答案 0 :(得分:9)

a=b;

此作业 a 指向与 b 相同的位置(&#34;安全编码&#34;)。您已经丢失了对 a 指向的初始位置的任何引用,因此基本上&#34;不安全的编码&#34;是无法释放的垃圾。

另一个问题是你将两次相同的指针释放出来。第一次免费后,你不再拥有那段记忆。

请参阅:What happens when you try to free() already freed memory in c?