当我尝试为array_x
分配内存时,我的程序总是以相同的分配崩溃。
在下面的代码中,如果我推荐行size = 10;
它就像魅力一样。如果我推荐这条线它会崩溃。为什么?
struct dt
{
int *array_x;
int b;
void start(int size)
{
//size = 10;
array_x = (int*)malloc(sizeof(int)*size);
}
};
void c_f()
{
dt *d = (dt*)malloc(sizeof(dt)*100);
for(int i = 0; i < 100; i++)
{
d[i].start(i);
for(int j = 0; j < 10; j++)
d[i].array_x[j] = 1;
}
d = (dt*)realloc(d, sizeof(dt)*200);
for(int i = 100; i < 200; i++)
{
d[i].start(i);//here it crashes
for(int j = 0; j < 10; j++)
d[i].array_x[j] = 1;
}
for(int i = 0; i < 200; i++)
for(int j = 0; j < 10; j++)
cout << d[i].array_x[j];
}
答案 0 :(得分:4)
当您在dt::start
循环中使用for
时,您正在将0
传递给该函数,从而导致:
(int*)malloc(sizeof(int)*size);
是:
(int*)malloc(0);
当然,访问返回的指针是未定义的行为。