使用C中的大型数组上的realloc进行分段错误

use*_*920 1 c c++ arrays realloc

我正在尝试实现一个动态数组 - 如果数组已满并且您添加了另一个点,它将使数组的大小加倍.数组的大小用len表示,数组中剩下的空格用reserved表示.如果我追加5650点它可以正常工作,但是一旦我达到5700或更高,就会给我一个分段错误.关于可能导致这种情况的任何想法?

int point_array_append( point_array_t* pa, point_t* p )
{
    if(pa->reserved==0)
    {
        if(!(realloc(pa->points, sizeof(point_t)*(pa->len * 2))))
            return 1;
        pa->reserved=pa->len;
    }
    pa->len++;
    pa->reserved--;
    pa->points[(pa->len)-1] = *p;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

MTi*_*ted 7

realloc返回指向新内存的指针.你不能这样扔掉它.