[英]In C++ does returning a string created from a local char array cause a memory leak or undefined behavior?
[英]Does strcpy'ing a string into into a larger char array cause a memory leak?
嘿所有,只是想知道以下是否會導致內存泄漏?
char* a = "abcd"
char* b = new char[80];
strcpy(b, a);
delete[] b;
它會刪除整個80塊還是只刪除strcpy復制到其中的4個字符? 謝謝!
您在b
分配了80個字節,因此delete[]
將釋放80個字節。 在此期間你對陣列做了什么是無關緊要的。
(當然,除非您損壞了堆,否則delete[]
可能會崩潰。)
編輯:正如其他人所指出的,由於b
是一個數組,你需要使用delete[] b;
而不是delete b;
。 一些實現可能會讓你逃避,但其他實現不會,它仍然是錯誤的。
內存泄漏是指您沒有釋放內存。 僅僅因為你分配了超過你需要的東西並不意味着內存泄漏。 你的記憶力取決於你。
雖然那應該1) delete [] b;
,或者你得到未定義的行為,2)是一個std::string
或std::vector
,所以你不管理和使用資源。
分配系統將負責記住分配的時間。 內容無關緊要。
但是,您需要調用正確的刪除操作符 。 在這種情況下,因為您分配了新的[],您需要刪除[]。
最后一行應該是:
delete[] b;
如果你分配一個項目使用刪除,如果你正在分配一個數組使用delete []。
由於這是標記的C ++,這里是C ++版本 - 通過new/delete
很好地理解內存管理,但最好避免使用RAII手動執行。
#include <string>
#include <iostream>
using namespace std;
int main()
{
string a("abcd");
string aCopy(a);
cout << aCopy << endl;
const char* b(aCopy.c_str());
cout << b << endl;
}
您發布的代碼已損壞。 請查看此主題: 'delete'的數組形式是什么?
GL
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.