我想學習C++,在這個過程中,我嘗試編寫一個函數,它獲取兩個char指針並將第二個連接到第一個連接(我知道有strcat
這個)。
但是 - 我想要完成的是修改第一個參數指針,以便它指向結果。爲此,我在第一個參數中使用了對指針的引用。在C++問題中的內存釋放(Visual Studio 2010)
從函數返回之前,我想釋放第一個參數的內存,但我得到一個錯誤。
下面是代碼:
void str_cat(char*& str1, char* str2)
{
if (!str1)
{
str1 = str2;
return;
}
if (!str2)
return;
char * new_data = new char[strlen(str1) + strlen(str2) +1];
char * new_data_index = new_data;
char * str1_index = str1;
char * str2_index = str2;
while(*str1_index)
*new_data_index++ = *str1_index++;
while(*str2_index)
*new_data_index++ = *str2_index++;
*new_data_index = NULL;
delete str1; //ERROR HERE (I also tried delete[] str1)
str1 = new_data;
}
我不明白爲什麼。
有什麼建議嗎?
感謝,
伊泰\
編輯 這裏是我如何使用
char * str1 = NULL;
char * str2 = NULL;
str_cat(str1, "abc");
str_cat(str2, "def");
str_cat(str1, str2);
調用代碼如何創建傳入的緩衝區? – 2010-07-10 12:53:14
'我正在學習C++',然後使用'std :: string'而不是C風格的字符串。 – 2010-07-10 12:57:04
@Georg Fritzsche - 我試圖使用str_cat(str1,「aaa」),但後來意識到第二個參數沒有在堆中分配,但在堆棧中,所以我將其更改爲新的char [] ...但仍然無效。 – 2010-07-10 12:57:08