c - 段错误、二维矩阵、malloc

标签 c arrays matrix malloc

我正在尝试使用 malloc 创建一个二维数组。 我的代码看起来是正确的,但是当我尝试设置值时,我收到“段错误”消息。

#include <stdio.h>
#include <stdlib.h>

int main(){
    int i, j;
    int **m = (int **) malloc(5 * sizeof(int));

    if(m == NULL){
        printf("Error");
        getchar();
        exit(-1);
    }

    for(i = 0; i < 5; i++){
        m[i] = (int *) malloc(5 * sizeof(int));

        if(m[i] == NULL){
            printf("Error");
            getchar();
            exit(-1);
        }
    }

    for(i = 0; i < 5; i++){
        for(j = 0; j < 5; j++){
            printf("%d %d\n", i, j);
            m[i][j] = 0;
        }
    }

    for(i = 0; i < 5; i++){
        for(j = 0; j < 5; j++){
            printf("%d ", m[i][j]);
        }
        printf("\n");
    }

}

谢谢。

最佳答案

改变

int **m = (int **) malloc(5 * sizeof(int));

//---------------------------------------v
int **m = (int **) malloc(5 * sizeof(int *));

如果 int 的大小不等于指针变量的大小,您的代码将会失败。

关于c - 段错误、二维矩阵、malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22903293/

相关文章:

matlab - 如何在 MATLAB 中使用 repmat、replicate 或 kron 等函数

c - do while 语句只执行两次 code::block 和 dev c++

c++ - 可变长度数组性能影响 (C/C++)

javascript - 替换数组中的值

algorithm - 内含 0 的极大方

matlab - 在 MATLAB 中绘制 3D 空间中的矩阵,而不使用网格和冲浪类型的绘图

c - C语言中令人困惑的分割问题

c - 尝试用指针做某事

c - C 中的长 double

python - 将数组广播到不同的形状(添加 "fake"维度)