我有這樣的代碼:的realloc()會導致段錯誤
Perro **obj = NULL;
obj = (Perro**)malloc(10*sizeof(Perro*));
for (int i = 0; i < 10; i++)
{
obj[i] = new Perrito((char*)"d",i);
}
realloc(obj,12*sizeof(Perro*));
for (int i = 9; i < 12; i++)
{
obj[i] = new Perrito((char*)"d",i);
}
for (int i = 0; i < 12; i++)
{
Perrito *p;
p = (Perrito*)obj[i];
cout << p->getEdad() << endl;
}
當我看到我的對象我看到內存轉儲(分段故障)錯誤。 當我將realloc
行註釋掉並減少最後一個長度的項目時,它正常工作,但我需要使用realloc
來增加我的polifirmist對象長度。
想都別想使用'realloc的()'與'new'分配的事情 - 請使用'new'和'delete'或...實際上,如果你正在學習C++,現在是忘記所有關於'malloc()','realloc()','free()'等的好時機。使用'new'和'delete'。只要!也就是說,如果你不能使用'vector'或類似的東西。 '(char *)「d」'casts也是令人擔憂的。構造函數可能需要一個'const char *'(這會使得演員不相關),或者你應該使用'const_cast (「d」)'來表示你正在做的演員的類型 - 但你不需要要做到這一點。 –
他對'malloc'分配的東西使用'realloc'。他只將'obj'傳遞給'realloc','obj'只包含普通的指針。 (我贊同演員表。) –
使用矢量,不要使用新的和刪除。停止使用C風格的演員。 –