我正在制作一个大小未定义的结构。
#define namemax 128
struct Image{
char name[namemax+1];
int length;
double *array; //double array[256]
};
struct Image* graph;
graph=malloc(max*sizeof(struct Image));
如果我定义array[256]
,那么一切都很好。但是如果我使用double *array
,然后写
graph[check].array = malloc( 100 * sizeof(double *));
它会产生分段故障。我想知道如何使用malloc
和realloc
来定义数组的大小。如果我在数组中添加值,它显示段故障。
struct Image* graph;//outside the while loop
while: //it is inside the while loop
//basically it read different name each line, and put the x and y to the array
graph[check].array = malloc( 100 * sizeof(double));
check++;
strcpy( graph[check].name,type);
graph[check].array[count]=shiftX;
graph[check].array[count+1]=shiftY;
因为double * array
声明的是指向数组的指针,而不是存储。您要在此处申报存储。最简单的方法是简单地将数组定义为double array[1]
,并确保它是结构中的最后一个元素。然后,您可以使用malloc()和realloc(。
我看到的一个问题是使用sizeof(double*)而不是sizeof(double),即使在使用x86-64体系结构时两者相同。
我认为这会使seg出错,因为在malloc中您已经说过sizeof(double *)
(实际上您声明了一个数组的数组)。试着说sizeof(double)
可能有效,但我不确定,因为我还没有测试过。
顺便说一句,当你静态地声明数组时,你在声明结构变量时为它保留了空间,但当你将它声明为指针(动态数组)时,你应该为它保留空间,你可以更改数组的大小。你应该使用realloc
谷歌它。