[英]Deleting a Dynamic Array in C++
char * names( char * fname = new char[ 15 ], char * lname new char[ 25 ] )
{
lname[ strlen( lname ) ] = ','; //adds a comma
lname[ strlen( lname ) ] = ' '; //adds a space(lastname, firstname)
strcat( lname, fname ); //concatenate fname to lname
delete[ ] fname; //delete array
return lname; //return lname
delete[ ] lname; //delete array
}
我對 C++ 中的動態數組沒有太多經驗,但我在我制作的函數中使用了一個。 我的理解是,您可以在使用完數組后釋放內存。 但是如果我在使用 return 語句之前刪除它,程序就會崩潰:這是函數:
如果我運行它,這會導致它崩潰,但是如果我在 return statmenet 之后移動 delete[] fname 語句,它就可以正常工作。 為什么在 return 語句之前刪除 [ ] fname 時會崩潰? 我將 fname 連接到 lname 並返回 lname。 如果我在返回之前刪除 fname 數組應該沒關系嗎? 還是不能這樣釋放內存?
這不是一個很好的 C++ 代碼。 首先,做你所做的並不是很優雅
char * names( char * fname = new char[ 15 ], char * lname new char[ 25 ] )
一個函數不應該用他的參數創建一些東西,它應該是一個副本、一個指針或一個對象的引用。
第二件事,如果你在返回后刪除它,它不會崩潰是正常的,因為它永遠不會刪除。 返回將結束函數,其他部分代碼將不會執行。
第三,您應該在 C++ 中使用字符串。 字符串自己管理內存,你不需要做那樣可怕的事情。
一個更好的方法可以是你的函數。
std::string names(std::string fname, std::string lname)
{
std::string fullname = lname + " ," + fname;
return fullname;
}
你可以這樣使用它
names("MyName", "MyLastName");
//Result
"MyName, MyLastName"
C方式(你應該考慮你的緩沖區足夠了,所以給足夠的緩沖區大小)
void name(char* infname, char* inlname, char* outfullname)
{
char* a = ", "
strcat(outfullname, inlname);
strcat(outfullname, a);
strcat(outfullname, infname);
}
所以你可以像這樣使用它
char fname[200];
char lname[200];
char fullname[500];
strcpy(fname, "MyName");
strcpy(lname, "Mylname");
name(fname, lname, fullname);
//fullname will be
"Mylname, MyName"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.