0
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]=' ';
        }

    }
}

这个 C 语言语句在我的 Visual Studio IDE 上运行良好,但是当我尝试在 CODE BLOCKS IDE 上运行相同的语句时,这个东西突然崩溃了。任何形式的帮助将不胜感激

4

3 回答 3

2

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

→ 总是乘以数组元素类型的大小,sizeof(*var)

 char **mat;

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

这样你就永远不会再把乘法弄错了。另一个优点:如果你决定改变 的类型matdouble你只需要改变一个地方:它的声明。

而且您不应该强制转换 malloc 返回值。它在 SOWhy 上已经被彻底抹杀了

于 2013-06-09T15:00:13.833 回答
1

您没有分配足够的内存:

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*));
于 2013-06-09T14:49:09.540 回答
1

两条线

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因为 in Cavoid*可以隐式转换为任何类型。

所以

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

也可以正常工作。

于 2013-06-09T14:51:45.250 回答