c-如何使用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;

因为double * array声明的是指向数组的指针,而不是存储。您要在此处申报存储。最简单的方法是简单地将数组定义为double array[1],并确保它是结构中的最后一个元素。然后,您可以使用malloc()和realloc(。

我看到的一个问题是使用sizeof(double*)而不是sizeof(double),即使在使用x86-64体系结构时两者相同。

我认为这会使seg出错,因为在malloc中您已经说过sizeof(double *)(实际上您声明了一个数组的数组)。试着说sizeof(double)可能有效,但我不确定,因为我还没有测试过。

顺便说一句,当你静态地声明数组时,你在声明结构变量时为它保留了空间,但当你将它声明为指针(动态数组)时,你应该为它保留空间,你可以更改数组的大小。你应该使用realloc谷歌它。

相关内容

  • 没有找到相关文章

最新更新