我在C++學習指針並遇到一個非常奇怪的問題。我們的任務是爲我們自己的類編寫我們自己的push_back
函數,它包含一個整數數組。刪除數組只偶爾失敗
我有以下簡單功能:
void IntRow::push_back(int value){
int *elements_temp = new int[size+1];
for (int i = 0; i <= size; i++){
elements_temp[i] = elements[i];
}
elements_temp[size + 1] = value;
elements = new int[size+1];
for (int i = 0; i <= size+1; i++){
elements[i] = elements_temp[i];
}
delete [] elements_temp;
size++;
}
然而這失敗,但上線只是偶爾:delete [] elements_temp;
,出現以下錯誤信息:
incorrect checksum for freed object - object was probably modified after being freed.
爲什麼這是怎麼發生的,爲什麼它只發生有時?
評分:我是否真的必須免費elements_temp
或者在功能存在之後是否被釋放?
'elements = new int [size + 1];'你在這裏失去了我。你爲什麼要分配**另一個**緩衝區? – StoryTeller
因爲我想將臨時數組中的所有內容都複製到新元素數組中以實際保留舊值+我們正在推動的新值。 –
'elements_temp [size + 1] = value;'是未定義的行爲。 –