我在GNU GCC编译器上运行代码时遇到问题,而它';他在VC&x2B上工作得很好+;编译程序 printf(“\n输入您的选择\n 1向用户询问游戏板的大小\n 2 tp从文件获取输入\n”); scanf(“%d”,选择(&C); 如果(选项==1) { printf(“\n输入行数和列数”); scanf(“%d%d”,行和列); mat=(char**)malloc(row*sizeof(char)); 标签=(字符**)malloc(行*sizeof(字符)); 对于(i=0;i

我在GNU GCC编译器上运行代码时遇到问题,而它';他在VC&x2B上工作得很好+;编译程序 printf(“\n输入您的选择\n 1向用户询问游戏板的大小\n 2 tp从文件获取输入\n”); scanf(“%d”,选择(&C); 如果(选项==1) { printf(“\n输入行数和列数”); scanf(“%d%d”,行和列); mat=(char**)malloc(row*sizeof(char)); 标签=(字符**)malloc(行*sizeof(字符)); 对于(i=0;i,c,malloc,C,Malloc,您没有分配足够的内存: printf("\n enter your choice\n 1 to ask user for the size of game board\n 2 tp get input from a file\n"); scanf("%d",&choice); if(choice==1) { printf("\n enter number of rows and columns"); scanf("%d%d",&row,&col);

您没有分配足够的内存:

printf("\n enter your choice\n 1 to ask user for the size of game board\n 2 tp get input from a file\n");
scanf("%d",&choice);
if(choice==1)
{
    printf("\n enter number of rows and columns");
    scanf("%d%d",&row,&col);
    mat=(char**)malloc(row*sizeof(char));
    label=(char**)malloc(row*sizeof(char));
    for(i=0;i<row;i++)
    {
        mat[i]=(char*)malloc(col*sizeof(char));
        label[i]=(char*)malloc(col*sizeof(char));
    }

    for(i=0;i<row;i++)
    {

        for(j=0;j<col;j++)
        {
            temp=rand()%5;

            mat[i][j]=color_codes[temp];
            label[i][j]=' ';
        }

    }
}
数组中的每个项都是指向char(
char*
)的指针,因此您应该乘以
sizeof(char*)


您没有分配足够的内存:

printf("\n enter your choice\n 1 to ask user for the size of game board\n 2 tp get input from a file\n");
scanf("%d",&choice);
if(choice==1)
{
    printf("\n enter number of rows and columns");
    scanf("%d%d",&row,&col);
    mat=(char**)malloc(row*sizeof(char));
    label=(char**)malloc(row*sizeof(char));
    for(i=0;i<row;i++)
    {
        mat[i]=(char*)malloc(col*sizeof(char));
        label[i]=(char*)malloc(col*sizeof(char));
    }

    for(i=0;i<row;i++)
    {

        for(j=0;j<col;j++)
        {
            temp=rand()%5;

            mat[i][j]=color_codes[temp];
            label[i][j]=' ';
        }

    }
}
数组中的每个项都是指向char(
char*
)的指针,因此您应该乘以
sizeof(char*)

两条线

mat=(char**)malloc(row*sizeof(char*));
label=(char**)malloc(row*sizeof(char*));
我看不太清楚,您试图为char分配一个指针数组,但只指定简单char的大小。指针通常需要多个字节

所以你可能需要的是

mat=(char**)malloc(row*sizeof(char));
label=(char**)malloc(row*sizeof(char));
注意无需对
malloc
的结果进行CAT运算,因为在
C
a
void*
中,可以隐式地将其转换为任何类型

所以

这两行也行。

mat=(char**)malloc(row*sizeof(char*));
label=(char**)malloc(row*sizeof(char*));
我看不太清楚,您试图为char分配一个指针数组,但只指定简单char的大小。指针通常需要多个字节

所以你可能需要的是

mat=(char**)malloc(row*sizeof(char));
label=(char**)malloc(row*sizeof(char));
注意无需对
malloc
的结果进行CAT运算,因为在
C
a
void*
中,可以隐式地将其转换为任何类型

所以


也可以正常工作。

有一种简单的方法可以避免此错误,即在执行malloc时使用错误的值进行乘法:

→ 始终与数组元素类型的大小相乘,
sizeof(*var)

mat=malloc(row*sizeof(char*));
label=malloc(row*sizeof(char*));
另一个好处是:如果您决定将
mat
的类型更改为
double
,则只需更改一个位置:它的声明


您不应该强制转换malloc返回值。

有一种简单的方法可以避免此错误,即在执行malloc时使用错误的值进行乘法:

→ 始终与数组元素类型的大小相乘,
sizeof(*var)

mat=malloc(row*sizeof(char*));
label=malloc(row*sizeof(char*));
另一个好处是:如果您决定将
mat
的类型更改为
double
,则只需更改一个位置:它的声明


你不应该抛出malloc返回值。

是的,你需要说它在哪一部分崩溃。我们只是想神奇地知道吗?你需要进一步告诉我们所有变量的声明。我认为七位你应该看到下面的答案,这可能会让你意识到知识来自经验是的,你需要嗯,它崩溃在哪一部分。我们只是想神奇地知道吗?你需要进一步告诉我们所有变量的声明。我认为七位你应该在下面看到一个答案,这可能会让你意识到知识来自经验,你不应该抛出malloc返回值。它被散列死了,为什么呢。thnks buddy realthnks buddy真的很有帮助,你不应该强制转换malloc返回值。它被散列死在why上。thnks buddy真的很有帮助,你不应该强制转换malloc返回值。它被散列死在why上。它被散列死在sizeof中的数组变量+1和不必要的抛出ary丢弃。sizeof中的数组变量为+1,用于丢弃不必要的丢弃。