好的,所以我有一個二維數組,用來自文件(格式: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