我是C ++的新手,我正在尝试了解解除分配数组内存的正确方法。尝试删除已分配的指针数组时,我收到以下错误: “没有分配被释放的指针。”
我的指针定义为:
T * al ;
al = new T[top] ;
虽然我的定义指针al
的类的析构函数是:
for( int i = 0 ; i < current ; i++ )
delete( al+i ) ;
delete [] al ;
class T
的析构函数是:
for( int i = 0 ; i < length ; i++ )
delete( p+1 ) ;
delete [] p ;
p
定义为:
char *p ;
length = strlen( str ) ;
p = new char[length] ;
strcpy( p, str ) ;
如何正确分配内存和/或如何解决此问题?
答案 0 :(得分:2)
只需使用delete []
,而不是循环使用。 delete []
将删除数组的每个元素。
此外,类T
析构函数中的循环正在尝试删除p+1
而不是p+i
答案 1 :(得分:0)
具体来说,你应该delete
这样:
int *a = new int; // One allocated
delete a; // So delete one
int *b = new int[50]; // 50 allocated
delete[] b; // Just use delete[], don't delete every one
int **c = new int*[50]; // 50 pointers to ints
for (int i = 0; i < 50; i++)
c[i] = new int; // each c[i] points to a pointer to a new int
for (int i = 0; i < 50; i++)
delete c[i];
delete[] c;
使用delete
时使用new
,delete[]
时使用new[]
。
执行以下操作实际上是错误的:
int *a = new int[50];
// do stuff...
for (int i = 0; i < 50; i++)
delete &a[i]; // equivalent to delete (a + i);
delete[] a;
您只执行delete[] a
,而不是delete (a + i)
。