与malloc崩溃的数独布局

时间:2014-11-29 14:19:53

标签: c arrays pointers malloc

#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时程序崩溃。

1 个答案:

答案 0 :(得分:0)

主要问题:内存分配不正确:(@ Kerrek SB)
sizeof(int)可能不是sizeof(int*)

的saem大小
 //  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