C 尝试将三维空间中的点附加到阵列末尾时出现seg错误

C 尝试将三维空间中的点附加到阵列末尾时出现seg错误,c,arrays,segmentation-fault,append,points,C,Arrays,Segmentation Fault,Append,Points,我有一个函数,它将3D空间中的一个点附加到数组的末尾,然后计算附加每个点所需的时间。但是当我运行我的代码时,它创建了一个初始化代码。但当它试图运行append函数时,它只是立即出现了seg故障。我一直在看我的代码,但我不明白它为什么会出现seg故障。有人能帮我吗 这是我的附加代码: int point_array_append( point_array_t* pa, point_t* p) { assert( pa ); assert( p ); if( pa->

我有一个函数,它将3D空间中的一个点附加到数组的末尾,然后计算附加每个点所需的时间。但是当我运行我的代码时,它创建了一个初始化代码。但当它试图运行append函数时,它只是立即出现了seg故障。我一直在看我的代码,但我不明白它为什么会出现seg故障。有人能帮我吗

这是我的附加代码:

int point_array_append( point_array_t* pa, point_t* p)
{
    assert( pa );
    assert( p );

    if( pa->len < pa->reserved )
    {
        size_t new_res = pa->len * 2 + 1;  // add 1 to take care of a NULL array
        size_t sz= new_res * sizeof(point_t);
        point_t* tmp = realloc( pa->points, sz );
        if( tmp == 0 )
            return 1; //fail
        pa->points = tmp;
        pa->reserved = new_res;
    }
    pa->points[pa->len] = *p; // copy struct into array
    pa->len++;
    return 0;
}

在if条件下,您可能有一个bug:


if(pa->lenreserved)
??@BLUEPIXY pa->reserved是我们为其分配内存的点数。而且我似乎需要(明确地)添加一个空值。
typedef struct point
{
  double x, y, z; // location in 3D space
} point_t;


typedef struct 
{
  size_t len; // number of points in the array
  point_t* points; // an array of len point_t structs 
  size_t reserved;  
} point_array_t;
if( pa->len < pa->reserved )
if ( <there are no more free slots in the array> )  
  reallocate
if (pa->len >= pa->reserved)
    ... do the reallocation