簡體   English   中英

在 C++ 中刪除動態數組

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

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