我有这样的代码:的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风格的演员。 –