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,因为在C
中void*
可以隐式地强制转换为任何类型。
mat=malloc(row*sizeof(char*));
label=malloc(row*sizeof(char*));
也可以