如何在函数中创建2D数组

时间:2018-12-02 18:23:53

标签: c arrays pointers

我制作了一个程序,可以在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;
        }
    }
}

希望我在使代码更易于阅读方面没有犯任何错误!

0 个答案:

没有答案