最近在入門c++,在看《c++ Primer Plus》一書。書中P106提到,刪除使用New創建的數組時,是將指針重新指到第一個元素后,再進行的刪除操作。代碼如下:
int *ptest = new int[3];
ptest[0]=1;
ptest[1]=2;
ptest[2]=3;
cout<<"*ptest "<<*ptest<<endl;
ptest = ptest+1;//此時指針指向第二個元素,也即:ptest[1]
cout<<"*ptest "<<*ptest<<endl; //這里輸出 2
delete [] ptest; //NOT OK .若是此時進行刪除分配的內存,將會報Expression: _CrtIsValidHeapPointer(Block)
delete [] (ptest-1);//OK 地址-1后,將返回第一個元素所在的地址。 或者說,delete 操作符作用於數組時,傳遞的參數必須是數組開始的地址。
//備注:這個報錯是否說明,刪除new分配的數組內存時,必須需要指針是指向第一個元素呢?
知識點:
1、使用New分配的內存空間,必須要使用delete進行回收。