我想用一個函數來刪除內存分配。該代碼如下...錯誤刪除大量撥款C++
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
using namespace std;
int NOS, *NO, *SQR;
int Square()
{
SQR = new int [NOS];
if (!SQR)
{
cout<<"Mem Error SQR \n";
exit(0);
}
for (int i = 0; i < NOS; i++)
{
SQR[i] = NO[i]*NO[i];
}
}
void ERASE_MEM()
{
if (SQR) delete [] SQR;
cout<<"Deleted 1\n";
if (NO != NULL) delete [] NO;
cout<<"Deleted 2\n";
}
int main()
{
cout<<"Enter No : ";
cin >> NOS;
NO = new int [NOS];
if (!NO)
{
cout<<"Mem Error NO \n";
exit(0);
}
for (int i = 0; i < NOS; i++)
{
NO[i] = 1+i;
}
Square();
delete NO;
ERASE_MEM();
}
如果這個數小於15,則程序工作正常,但如果NOS大於15,我得到以下錯誤:
* glibc的檢測 ./MEM:雙重釋放或腐敗(上):0x097fa008 * *
我才能這樣做是爲了爲所有內存解除分配創建一個函數,我可以在分配內存時調用它。如果分配失敗,該函數將取消分配所有以前的分配。
感謝
與你的問題沒有關係,但不檢查`new`的結果爲null。如果分配內存出錯,它通常會拋出。 – 2011-02-17 04:55:43
在刪除之前,您也不必檢查空指針,因爲需要刪除來處理空指針。 – 2011-02-17 04:59:52