夜袭中关村
2019-09-25 16:00
采纳率: 50%
浏览 665

c语言,每次执行到给结构体内的二维数组成员变量赋值时程序就崩溃了,有大佬知道原因吗

结构体的声明

struct IMPERIAL{
    int **my_map;
    int numVar;
    void(*initialMap)(int **, int );
    void(*clearMap)(int **, int );
};
void myInitialMap(int **my_map, int n)
{
    my_map = (int **)malloc(sizeof(int*) * n);
    for(int i=0;i<n;++i){
        my_map[i] = (int*)malloc(sizeof(int) * n);
    }

    int count=0;
}
void myClearMap(int **my_map, int n)
{
    for(int i=0;i<=n;i++) free(*(my_map + i));
    free(my_map);
}

初始化

int node;
    char myInput[10];
    for(int j=2;j<=item.numVar;j++)  
        for(int i=1;i<j;i++){
            scanf("%s",myInput);
            int b;
            if(myInput[0]!='x')
            {
                sscanf(myInput,"%d",&node);
                item.my_map[j][i]=node;
                item.my_map[i][j]=item.my_map[j][i];
            }
        }

每次一到 item.my_map[j][i]=node; 程序就崩溃了,不知道什么原因啊

编译过了,没有报错,执行到这一步程序就会直接卡住

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • Boover 2019-09-25 16:43
    已采纳
    void myInitialMap(int **my_map, int n)
    {
        my_map = (int **)malloc(sizeof(int*) * n); // 这句对传入的参数my_map没有影响
        for(int i=0;i<n;++i){
            my_map[i] = (int*)malloc(sizeof(int) * n);
        }
    
        int count=0;
    }
    

    这一段代码有问题,应该改为

    void myInitialMap(int ***my_map, int n) // 调用的时候使用&item.my_map
    {
        *my_map = (int **)malloc(sizeof(int*) * n);
        for(int i=0;i<n;++i){
            (*my_map)[i] = (int*)malloc(sizeof(int) * n);
        }
    
        int count=0;
    }
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • qtchen_1988 2019-09-25 16:56

    二级指针操作:

     item.my_map[j][i]=node;
     改成这种样式:
     *((int *)a +i*n +j )//n表示第二维数组长度,即列宽
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题