だから、私はこのプログラムを書いたが、ヒープバッファオーバーフローの問題を言っているメッセージがたくさんある。私はグラムで入力したときしかし、私は「誰が助けてくださいすることができますtは、問題を参照してください。 ここでコードは、オーバーフローが起こることができます(任意の整数)(任意の整数)ヒープバッファのオーバーフローがC
char **ptr;
void setmine();
/* create a minefield
**/
void setmine(int width , int height) {
ptr = (char **)malloc(sizeof(char)*height);
for (int i = 0; i < height; i++) {
ptr[i] = (char *)malloc(sizeof(char)*width);
}
}
int main(void) {
char line1[20];
char command1;
int width, height;
fgets(line1,20,stdin);
sscanf(line1,"%c %d %d",&command1, &width, &height);
if(command1=='g'){
setmine(width, height);
}
else{
printf("error");
exit(0);
}
char line2[20];
char command2;
int column, row;
fgets(line2,20,stdin);
sscanf("%c %d %d", &command2, &column, &row);
if(command2=='g'){
printf("error");
exit(0);
}
else if(command2=='b'){
setbomb(column,row);
}
else if(command2=='u'){
uncover(column,row, width, height);
}
else if(command2=='f'){
flag(column,row);
}
}
sscanf( "%c%d%d"、&command2、&column、&row); 'は' sscanf() 'の結果を確認せずに' command2、column、row'を使う前に成功しましたか? – chux
最初に 'sizeof(char *)'または 'sizeof(* ptr)' –
と 'sscanf'戻り値をチェックしないという問題があります。入力が無効だった場合、 'width'、' height'にはゴミが含まれていて、仮想メモリは32ビットシステムとそれ以外のもので使い果たしてしまうでしょう。 –