#include <iostream>
using namespace std;
int main()
{
char* p=new char[10];
p="sudheer";
char* q=new char[10];
q=p;
delete []p;
return 0;
}
當我運行上述程序時,它崩潰與刪除。任何意見?應用程序崩潰時刪除調用
#include <iostream>
using namespace std;
int main()
{
char* p=new char[10];
p="sudheer";
char* q=new char[10];
q=p;
delete []p;
return 0;
}
當我運行上述程序時,它崩潰與刪除。任何意見?應用程序崩潰時刪除調用
是的,你正在刪除一個字符串文字「sudheer」,這足以造成程序崩潰。
我認爲你的錯誤是不理解如何複製C字符串,使用strcpy
。此外,如果您使用new []
,則必須使用delete[]
而不是delete
。你可能打算寫這個程序
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char* p=new char[10];
strcpy(p,"sudheer"); // use strcpy to copy C strings
char* q=new char[10];
q=p;
delete[] p;
return 0;
}
的常量"sudheer"
被理解爲一個指向8個字節的只讀存儲器區。
您正在刪除它,這是undefined behavior。 p=new char[10]
的前一個結果是不可訪問的內存區域。你有內存泄漏。
我建議使用std::string
如此宣佈
std::string p = "sudheer";
p
是一個指向字符。首先,創建10個字符的內存塊,並告訴p
指向那個(p=new char[10];
)。下一行你告訴p
而不是指向另一個帶有文本「sudheer」的內存塊(p="sudheer";
)。
此時p
不再指向您分配的內存塊,因此刪除p
不會取消分配該塊。它試圖釋放字符串。
確實 - 什麼也沒有指向了10個字符的內存塊了。它丟失在計算機的內存中。這是內存泄漏。
請注意,您正在使用q
。如果你想拷貝字符串使用strcpy
。或者,很明顯,您可以使用std::string
(與#include <string>
),然後使用像您期望它們的行爲而不是指針在c中使用的字符串。
p="sudheer";
然後
delete p;
你超支動態分配p
,然後試圖刪除它,它失敗。
專業提示:改爲使用'std :: string'。 – Shoe
關於指針的教程一定會對您有所幫助。看看任何推薦的C++書籍 –