C语言 数独布局与马洛克崩溃


#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

相关内容

  • 没有找到相关文章

最新更新