我正在制作一个未定义大小的结构。
#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;

答案 0 :(得分:2)
因为double * array
声明了一个指向数组的指针,而不是存储。您想在此处声明存储空间。最简单的方法是简单地将数组定义为double array[1]
,并确保它是结构中的最后一个元素。然后,您可以使用malloc()和realloc()为结构分配空间,方法是传递基础结构的大小加上数组的大小(sizeof double *数组元素的数量)。
答案 1 :(得分:0)
我看到的一个问题是使用sizeof(double *)而不是sizeof(double),即使你使用的是x86-64架构,两者都是相同的。
答案 2 :(得分:0)
我认为它会造成seg错误,因为在malloc中你说过sizeof(double *)
(实际上你声明了一个数组数组)。
试着说sizeof(double)
它可能有效,但我不确定,因为我没有测试过它。
顺便说一下,当你声明你的struct变量时静态声明数组,但是当你将它声明为指针(动态数组)时,你应该为它保留空间,你可以改变数组的大小。您应该使用realloc
google it。