0
該函數將元素插入到動態數組中。我得到這個錯誤,當我註釋掉delete []數組,但如果我不這樣做,一切工作正常..這是我插入數組進行順利。安迪的想法爲什麼?對象在被釋放C++後可能被修改?
錯誤:被釋放的對象的錯誤校驗和 - 被釋放後對象可能被修改。 ***設置斷點在malloc_error_break調試
#include <iostream>
#include "dynamic_array.h"
using namespace std;
dynamic_array::dynamic_array() {
try {
array = new int[0];
size = 0;
allocated_size = 5;
} catch (const std::bad_alloc& e) {
throw exception(MEMORY_EXCEPTION);
}
}
dynamic_array &dynamic_array::operator=(const dynamic_array &a) {
return *this;
}
dynamic_array::~dynamic_array() {
delete [] array;
}
int dynamic_array::get_size(void) const {
return size;
}
int dynamic_array::get_allocated_size(void) const {
return allocated_size;
}
int& dynamic_array::operator[](unsigned int i) {
if (i >= get_size())
throw exception(SUBSCRIPT_RANGE_EXCEPTION);
else
return array[i];
}
const int& dynamic_array::operator[](unsigned int i) const {
if (i >= get_size())
throw exception(SUBSCRIPT_RANGE_EXCEPTION);
else
return array[i];
}
void dynamic_array::insert(int x, int i) {
try {if (i < 0 || i > get_size())
throw exception(SUBSCRIPT_RANGE_EXCEPTION);
if(size == 0){
array[i] = x;
size++;}
else if(allocated_size == size){
int *array2;
array2 = new int[allocated_size+5];
allocated_size += 5;
for(int j=0;j<=size-1;j++)
array2[j] = array[j];
//delete [] array;
array = array2;
shift_right(i,size-1,1);
array[i] = x;
size++;
}
else{
shift_right(i,size-1,1);
array[i] = x;
size++;
}
} catch (const std::bad_alloc& e) {
throw exception(MEMORY_EXCEPTION);
}
}
void dynamic_array::shift_right(int start, int end, int delta) {
if(0 <= start && start <= end & end <= size){
int temp [size];
int s = 0;
for(int i = start; i <= end; i++){
temp[s] = array[i];
s++;
}
int d = 0;
for(int j = start + delta ; j< sizeof(temp)+end; j++){
array[j] = temp[d];
d++;}
}
}
'array'' new []'ed? – songyuanyao
請提供[mcve](/ help/mcve)。很有可能你有一個指向你調用ccde的somwhere的舊數組的指針,並在刪除數組後使用它。 – MikeMB
上傳了整件事。 –