c语言 - 我在 GNU GCC 编译器上运行代码时遇到问题,而它在 VC++ 编译器上工作正常


printf("n enter your choicen 1 to ask user for the size of game boardn 2 tp get input from a filen");
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]=' ';
        }
    }
}

这个C语言语句在我的visual studio IDE上运行得很好,但是当我试图在CODE BLOCKS IDE上运行同样的语句时,这个东西突然崩溃了。任何类型的帮助将非常感谢

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

→总是与数组元素类型的size相乘,sizeof(*var)

 char **mat;
 mat = malloc (row * sizeof(*mat));

这样你就永远不会再做错乘法了。另一个优点是:如果您决定将mat的类型更改为double,那么您只需要更改一个地方:它的声明。

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

您没有分配足够的内存:

mat=(char**)malloc(row*sizeof(char));
label=(char**)malloc(row*sizeof(char));

数组中的每一项都是指向char (char*)的指针,所以你应该乘以sizeof(char*):

mat=(char**)malloc(row*sizeof(char*));
label=(char**)malloc(row*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的结果进行cats,因为在Cvoid*可以隐式地强制转换为任何类型。

mat=malloc(row*sizeof(char*));
label=malloc(row*sizeof(char*));

也可以

相关内容

  • 没有找到相关文章

最新更新