将字符串strcpy到更大的char数组会导致内存泄漏吗?

Ros*_*son 3 c++ memory-leaks

嘿所有,只是想知道以下是否会导致内存泄漏?

char* a = "abcd"
char* b = new char[80];

strcpy(b, a);

delete[] b;
Run Code Online (Sandbox Code Playgroud)

它会删除整个80块还是只删除strcpy复制到其中的4个字符?谢谢!

Fré*_*idi 11

你分配了80个字节b,因此delete[]将释放80个字节.在此期间你对阵列做了什么是无关紧要的.

(当然,除非您损坏了堆,delete[]否则可能会崩溃.)

编辑:正如其他人所指出的,因为b是一个数组,你需要使用delete[] b;而不是delete b;.有些实现可能会让你逃脱,但其他实现不会,它仍然是错误的.


GMa*_*ckG 5

内存泄漏是指您没有释放内存.仅仅因为你分配了超过你需要的东西并不意味着内存泄漏.你的记忆力取决于你.

虽然这应该是1)delete [] b;,或者你得到未定义的行为,2)是一个std::stringstd::vector,所以你不管理和使用资源.