2016-01-20 33 views
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++;} 
} 

}

+0

'array'' new []'ed? – songyuanyao

+0

請提供[mcve](/ help/mcve)。很有可能你有一個指向你調用ccde的somwhere的舊數組的指針,並在刪除數組後使用它。 – MikeMB

+0

上傳了整件事。 –

回答

0

有與shift_right一個問題,我不得不重寫..變速被超出分配給數組的大小,並且當固定那個錯誤消失了。

相關問題