如何将2D指针分配给结构[重复]

问题描述 投票:0回答:1
分配数组后(忽略该方法,因为我们不允许使用您建议的方法),我想初始化struct(我构建了一个函数以执行此操作,但它不起作用),我试图做到这一点分配后,并继续获得“未经手的例外”警告,是否必须这样做 使用语法,我忘记了一个'*'?
void flightMatrix() { FILE * fpf; int checkScan,Origin,Dest; float time,cost; char flightName[3]; flightInfo *** matrix; if(!(fpf=fopen("flights.txt","r")))exit(1); while((checkScan=fscanf(fpf,"%*10c%3d%3d%3c%5f%7f%*",&Origin,&Dest,flightName,&time,&cost))!=EOF) { matrix=allocateMatrix(Dest); matrix[Origin-1][Dest-1]->o=Origin; }

}

flightInfo*** allocateMatrix(int n) { int i,j; flightInfo*** matrix; matrix=(flightInfo***)malloc(sizeof(flightInfo **)*n); for(i=0;i<n;i++) matrix[i]=(flightInfo **)malloc(sizeof(flightInfo*)*n); for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) matrix[i][j] = NULL; } return matrix; }

这就是我尝试初始化

时发生的情况
	
从技术上讲,这不会创建2D数组。结果将是一系列指针,其中每个指向指示的指针数不同。

不同之处在于,内存将被删除,因此每个元素都会指向某些内存位置,而不是单个连续内存块。

共同的方法是创建扁平的2D数组:
c arrays struct malloc
1个回答
0
投票
flightInfo** allocateMatrix(int n) { flightInfo** matrix = malloc(n*n * sizeof(*matrix)); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) matrix[i*n + j] = NULL; return matrix; }

如果您被迫使用两个索引,那么您可以将矩阵作为函数参数:

void allocateMatrix(int n, flightInfo* (**matrix)[n]) { *matrix = malloc(n * sizeof(**matrix)); for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) (*matrix)[i][j] = NULL; }

需要第二个星号,因为指针是按值传递的,否则您最终会得到修改的指针的本地副本,这对matrix

函数无济于事。

main

另一种方法是将数组封装在结构内。
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.