嘿所有,只是想知道以下是否会导致内存泄漏?
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;
.有些实现可能会让你逃脱,但其他实现不会,它仍然是错误的.
内存泄漏是指您没有释放内存.仅仅因为你分配了超过你需要的东西并不意味着内存泄漏.你的记忆力取决于你.
虽然这应该是1)delete [] b;
,或者你得到未定义的行为,2)是一个std::string
或std::vector
,所以你不管理和使用资源.
归档时间: |
|
查看次数: |
767 次 |
最近记录: |