#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");
}
}
当"n"(行)小于 4 时,此程序printf
具有"n"行和"m"列的数独布局。但是当行数超过 4 时,程序崩溃。
主要问题:内存分配不正确:(@Kerrek SB)
sizeof(int)
可能不是 saem 大小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