复杂的malloc用法

时间:2014-01-08 23:32:17

标签: c++ arrays pointers memory-management

当我尝试为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];
}

1 个答案:

答案 0 :(得分:4)

当您在dt::start循环中使用for时,您正在将0传递给该函数,从而导致:

(int*)malloc(sizeof(int)*size);

是:

(int*)malloc(0);

当然,访问返回的指针是未定义的行为。