我每次取消註釋l70-72時,程序都會發生運行時錯誤。這不是我第一次遇到這個特殊問題。爲什麼我有一個運行時錯誤動態內存分配(堆)?
我做一個指向對象的數組,發送指針變成一個功能,嘗試執行在主函數定義的命令,並得到一個運行時錯誤,都同時使用堆。該指針或數組中的指針會發生明顯的變化。
當我調用manage_Rectangle_arr(string strCommand, Rectangle * *arr, short *siArrayL)
以下任何一種時出現錯誤:「填充數組」,「獲取區域」和「空內容」(顯然最後兩個與「填充數組」有關,因爲他們需要它首先執行以功能)
void manage_Rectangle_arr(string, Rectangle * *, short*);
int main()
{
Rectangle * * arr;
short siArrayL=1;
manage_Rectangle_arr("make array", arr, &siArrayL);
manage_Rectangle_arr("fill array", arr, &siArrayL); //Problem here
manage_Rectangle_arr("get areas", arr, &siArrayL); //Problem here
manage_Rectangle_arr("empty contents", arr, &siArrayL); //Problem here
manage_Rectangle_arr("delete array", arr, &siArrayL);
}
void manage_Rectangle_arr(string strCommand, Rectangle * *arr, short *siArrayL)
{
if(strCommand=="make array")
arr = new Rectangle * [ *siArrayL];
if(strCommand=="fill array") //Problem here
for(short s=0; s< *siArrayL; ++s)
arr[s]= new Rectangle(1, 1);
if(strCommand=="get areas") //Problem here
for(short s=0; s< *siArrayL; ++s)
cout << arr[s]->getArea();
if(strCommand=="empty contents") //Problem here
for(short s=0; s< *siArrayL; ++s)
delete arr[s];
if(strCommand=="delete array")
delete [] arr;
}
//When I call manage_Rectangle_arr(string strCommand, Rectangle * *arr, short *siArrayL) with any of the following: "fill array", "get areas" and "empty contents" (obviously the last two are related to "fill array" in nature, since they need it to be executed first in order to function)
如果編輯問題的最小可能代碼到問題中,則可以將此問題遷移到堆棧溢出。在目前的狀態下,我不會讓它遷移。 – ChrisF 2012-03-19 11:54:12
你錯過了這一點。在問題**中包含代碼**,而不是鏈接到外部網站。 – ChrisF 2012-03-19 12:35:01
我測試了你的代碼。使用Visual Studio 2010代碼崩潰只是與'刪除'取消註釋。這是因爲您嘗試刪除未分配的內存區域。 – Max 2012-03-19 12:37:37