[英]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 += "<";
else if(crntStr[j] == '>')
newStr += ">";
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.