C 尝试将三维空间中的点附加到阵列末尾时出现seg错误
我有一个函数,它将3D空间中的一个点附加到数组的末尾,然后计算附加每个点所需的时间。但是当我运行我的代码时,它创建了一个初始化代码。但当它试图运行append函数时,它只是立即出现了seg故障。我一直在看我的代码,但我不明白它为什么会出现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->
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