簡體   English   中英

將字符串strcpy到更大的char數組會導致內存泄漏嗎?

[英]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::stringstd::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM