C-创建动态数组并初始化它



对于学校项目,我们必须在C中创建一个迷宫,我是该语言的初学者,所以我一开始就陷入了困境:动态创建一个数组。。

我阅读了有关malloc和calloc的信息,并试图使用它,但没有成功...

这是我的代码:

/* define maze structure */
typedef struct _maze_t {
    int m, n;
    char **array;
} Maze;
void constructorArray(int m,int n)
{ 
    array = malloc(m * sizeof *array);
    for(i=0;i<m;i++){
        array[i]=(char *) malloc(n*sizeof(char)); 
    }
    array = calloc(m, sizeof *array);
    for (i=0; i<m; i++){
      array[i] = calloc(n, sizeof *(array[i]));
    }   
}
void createMaze(int ncolumn, int mlign)
{    
    int m=mlign;
    int n=ncolumn;
    int counter=0; 
    constructorArray(m,n) ;     
    char **array;            
    for(i=0;i<m;i++)
    {
        for(y=0;y<n;y++)
        {
            array[i][y]=counter;
            counter++;
        }
    }
}
int main()
{
    createMaze(100,100);    
    return 0;
}

有人可以向我解释如何正确吗?

看来您有一些不正确的人。

首先,您没有正确声明您的C功能:

constructorArray(m,n)

应该是:

void constructorArray(int m, int n)

那么,您认为您认为构造函数将在C中自动称为,因此并非如此,因此仅在CreateMaze中简单地编写array[m][n]就无法使用。你应该写:

char **array;    // it will be allocated dynamically

,然后具有您的功能:

char **constructorArray(int m, int n)
{ 
    char **array= malloc(m*sizeof(char *));
    for(int i=0; i<m; i++)
        array[i]= malloc(n*sizeof(char));
    return array;
}

您现在可以称为:

char **array= constructorArray(m, n);

注意:您对数组的使用表明int的数组可能更缝合。

相关内容

  • 没有找到相关文章

最新更新