#include<stdio.h>
#include<stdlib.h>
void *mymalloc(size_t size){
void *x=malloc(size);
if(x==NULL){
printf("Not enought memory for you!\n");
exit(1);}
else return x;
}
int main(){
int m , n , **A , i , j , z ,k;
printf("Give rows: \n");
scanf("%d" , &n);
printf("Enter columns: \n");
scanf("%d" , &m);
A=(int**)mymalloc(n*sizeof(int));
for(i=0;i<n;i++){
A[i]=(int*)mymalloc(m*sizeof(int));
}
printf("Give your sudoku: \n");
for(k=0;k<m;k++){
for(z=0;z<n;z++){
for(i=0;i<n;i++){
printf(" %d: " , i);
for(j=0;j<m;j++){
printf("%d" , A[i][j]=j);
}
printf(" ");
}
printf("\n");
}
printf(" \n");
}
}
当&#39; n&#39; (行)小于4这个程序printf
数独的布局&#39; n&#39;行和&#39; m&#39;列。但是当行超过4时程序崩溃。
答案 0 :(得分:0)
主要问题:内存分配不正确:(@ Kerrek SB)
sizeof(int)
可能不是sizeof(int*)
// A=(int**)mymalloc(n*sizeof(int));
A=(int**)mymalloc(n*sizeof(int*));
为了避免这种错误,推荐这种风格,不易出错,更容易维护。
A = mymalloc(n * sizeof *A);
其他小问题:
// printf("Not enought (spelling)
printf("Not enough ...
// int main() { // Invalid signature
int main(void) {
// No need for cast
// A[i] = (int*) mymalloc(...
A[i] = (int*) mymalloc(...
return 0; // missing main() return value