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上运行同样的语句时,这个东西突然崩溃了。任何一种帮助都会受到高度赞赏
答案 0 :(得分:2)
在执行malloc时,有一种简单的方法可以避免这个错误,即你用错误的值乘以:
→始终乘以数组元素类型的大小sizeof(*var)
←。
char **mat;
mat = malloc (row * sizeof(*mat));
这样你永远不会再次错误的乘法。另一个优点:如果您决定更改mat
的类型,double
,您需要更改的是一个地方:它的声明。
并且您不应该转换malloc返回值。 It's been hashed to death on SO why
答案 1 :(得分: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*));
答案 2 :(得分: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
的结果不一定是C
,因为void*
mat=malloc(row*sizeof(char*));
label=malloc(row*sizeof(char*));
可以隐式投放到任何类型。
所以
{{1}}
也会正常工作。