簡體   English   中英

C ++數組也會泄漏內存嗎?

[英]Can c++ array also leak memory?

我是c ++的新手,我無所畏懼地進行了實驗,直到我看到了關於cs50的講座,即內存泄漏以及其他東西可能會使我的計算機崩潰,我已經用PHP和javascript編程,我猜這些東西不存在,這是我寫的程序:

int main(int argc, char** argv) {

    ifstream inFile;

ofstream outFile;

int size;

inFile.open("text.txt"); //Step 2

outFile.open("formated.out"); //Step 3

//這里是通​​過PHP發送文件,其中文件的第一行是文件中的行數

inFile >> size;

size += 1;

string strArr[size];

for(int i = 0;i < size;i++){
    getline(inFile, strArr[i]);
}

string crntStr;
int sl;
string newStr;
for(int i = 1;i < size;i++){

    newStr = "";

    string crntStr = strArr[i];

    sl = crntStr.length();

    for(int j = 0;j < sl;j++){

        if(crntStr[j] == '<')
        newStr += "&lt;";
        else if(crntStr[j] == '>')
        newStr += "&gt;";
        else
        newStr += crntStr[j];

    }

    cout << newStr  << endl; 

    if(i != (size - 1))
    cout <<  "<br>";

}

    return 0;
}

我的問題是,當我編寫此類程序時,我應該擔心內存泄漏,我在devc ++中編譯了該程序,並且運行良好,但是當我進入Visual Studio時,出現以下錯誤:c:\\ users \\ hamza \\ source \\ repos \\ hypertextformatting \\ hypertextformatting \\ hypertextformatting.cpp(32):錯誤C2131:表達式未求值為常數c:\\ users \\ hamza \\ source \\ repos \\ hypertextformatting \\ hypertextformatting \\ hypertextformatting.cpp(32):注意:失敗是由於在其生存期之外讀取變量而引起的c:\\ users \\ hamza \\ source \\ repos \\ hypertextformatting \\ hypertextformatting \\ hypertextformatting.cpp(32):注意:請參見'size'的用法

只有堆上的內存分配(或動態分配)才能導致內存泄漏。 聲明數組字符串時,strArr [size]; 它將被放置在堆棧上,並在程序離開當前作用域時自動“釋放”(堆棧指針將減小strArr大小)並調用desctructor。 盡管“字符串”對象數據放置在動態分配的內存中,但析構函數將釋放它。 內存泄漏在這里是不可能的。 如果通過new,new [],malloc等調用在堆中分配內存,則會造成內存泄漏,而在不再需要它們之后忘記釋放數據。

所以

string strArr[size]; // no leaks
string* strArr = new string[size]; //may be leak if you forget call delete[] strArr

此外,可變長度數組在C ++中是非標准的,請避免使用它!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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