我制作了一个程序,可以在main
中创建一个2D数组,然后传递要填充的数组。我想在用于模块化的函数中创建数组并保持main
干净,到目前为止,我原始代码的简化版本是:
int main(int argc, char *argv[])
{
long iWidth; /*Image width*/
long **arr; /*creating array to hold the black and white image*/
<get width of a square image into iWidth>
arr = mallocSafe(iWidth * sizeof *arr); /*Can dynamically allocate memory for the 3d array now width is known*/
for (i=0; i < iWidth; i++) /*allocate the array (rows)*/
{
arr[i] = mallocSafe(iWidth * sizeof *arr[i]); /*allocate the array (columns)*/
}
buildArr(iWidth, arr);
...
}
buildArr(iWidth, arr)
{
...
for (x = 0; x < iWidth; x++) /*fills the array with white pixels*/
{
for (y = 0; y < iWidth; y++)
{
arr[x][y] = 0;
}
}
}
这可以正常工作,但是当我在单独的函数中分配并初始化数组时,尝试在buildArray函数中填充数组时会出现段错误。显然,我不像我想象的那样理解数组。有人可以指出我要去哪里了吗?我尝试了几种不同的方法,最新方法如下:
int main(int argc, char *argv[])
{
long iWidth; /*Image width*/
long **arr /*creating array to hold the black and white image*/
createArray(arr, iWidth);
buildArr(iWidth, arr)
}
void createArray(long** arr, long size)
{
int i;
arr = mallocSafe(size * sizeof *arr); /*Can dynamically allocate memory for the 3d array now width is known*/
for (i=0; i < size; i++) /*allocate the array (rows)*/
{
arr[i] = mallocSafe(size * sizeof *arr[i]); /*allocate the array (columns)*/
}
}
buildArr(iWidth, arr)
{
...
for (x = 0; x < iWidth; x++) /*fills the array with white pixels*/
{
for (y = 0; y < iWidth; y++)
{
arr[x][y] = 0;
}
}
}
希望我在使代码更易于阅读方面没有犯任何错误!