我已經實現了我自己的簡單的載體,所有的功能似乎除了在alloc_new()
很好,當它試圖創建新的內存拷貝的內容他們並刪除舊的內存分配。 我的程序總是掛起,之後永遠不會執行。C++刪除[]總是掛着
class myvector{
private:
int vsize, maxsize;
int* arr;
void alloc_new();
public:
myvector();
myvector(int);
myvector(const myvector&);
~myvector();
void push_back(int);
int size();
int operator[](int);
int at(int);
void display();
};
myvector::myvector(){
maxsize = 20;
vsize = 0;
arr = new int[maxsize];
}
void myvector::alloc_new(){
// Allocate new space, double of current size
maxsize = maxsize*2;
int* arr_new = new int[maxsize];
//copy the elements from the base location to new location
for(int i=0; i < vsize ; i++)
arr_new[i] = arr[i];
delete[] arr; // MY PROGRAM ALWAYS HANGS HERE
arr = arr_new;
}
void myvector::push_back(int val){
if((vsize+1) > maxsize)
alloc_new();
arr[++vsize] = val;
}
int main(){
myvector vect;
for(int i=0;i<25;i++){
vect.push_back(rand()%100+1);
}
getch();
}
這通常是你破壞堆的標誌 - 嘗試下的valgrind運行。 – 2015-02-08 08:38:03
實驗表明,這種情況用Visual C++時'maxsize'最初20 - 但不是例如19或21.我懷疑它與底層OS分配器的塊大小有關,並且這是一個編譯器錯誤。您可以在「Microsoft連接」網站上報告它。 – 2015-02-08 08:58:50
@ Cheersandhth. - 阿爾夫:錯誤中的push_back越過邊緣。據推測,這則還需要與分配是「大小均勻」不謀而合,或者你只是簡單地覆蓋在分配備用空間(我的Linux系統上,它運行完全正常,但Valgrind的發現問題)。 – 2015-02-08 09:00:58