如何使用malloc更改结构的大小

时间:2015-10-30 03:44:33

标签: c arrays struct malloc

我正在制作一个未定义大小的结构。

#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 *));

它会产生段错误。 我想知道如何使用mallocrealloc为数组定义大小。 如果我在数组中添加值,则会显示段错误。



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;




3 个答案:

答案 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。