好的,所以我有一个二维数组,用来自文件(格式:x y z)的值初始化。
我的文件正确读入值,但是当将z值添加到矩阵/ 2DArray时,我遇到了段错误,我不知道为什么。这可能是不正确的使用指针?我还没有完成他们的任务。初始化二维数组
这是我的初始化器,做工精细,甚至初始化所有“Z”值0
int** make2DArray(int rows, int columns)
{
int** newArray;
newArray = (int**)malloc(rows*sizeof(int*));
if (newArray == NULL)
{
printf("out of memory for newArray.\n");
}
for (int i = 0; i < rows; i++)
{
newArray[i] = (int*)malloc(columns*sizeof(int));
if (newArray[i] == NULL)
{
printf("out of memory for newArray[%d].\n", i);
}
}
//intialise all values to 0
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < columns; j++)
{
newArray[i][j] = 0;
}
}
return newArray;
}
这是我如何调用初始化器(和解决问题的功能)。
int** map = make2DArray(rows, columns);
fillMatrix(&map, mapFile);
这就是问题代码。
void fillMatrix(int*** inMatrix, FILE* inFile)
{
int x, y, z;
char line[100];
while(fgets(line, sizeof(line), inFile) != NULL)
{
sscanf(line, "%d %d %d", &x, &y, &z);
*inMatrix[x][y] = z;
}
}
从我可以通过使用DDD的收集,问题就来当y到达47
的地图文件有一个最大的“x”的47值以及63最大“Y”值,我很确定我没有把订单混淆,所以我不知道该程序为什么是segfault-ing?我敢肯定,这是一个新手的错误...
将阵列构建为阵列阵列会导致性能下降,原因有三。 1:查找一个元素需要两次内存访问(1获取行指针,然后另一个查找行中的值); 2:矩阵元素不是连续存储的,这会损害缓存;和3:它阻止您使用BLAS等高性能矩阵库。 – amaurea 2017-07-29 10:08:04