【问题标题】:Segmentation fault, 2-Dimensional Matrix, malloc分段错误,二维矩阵,malloc
【发布时间】:2014-04-07 03:49:45
【问题描述】:

我正在尝试使用 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");
    }

}

谢谢。

【问题讨论】:

  • 这就是 C 标记为 C++ 的原因
  • 我认为你应该修改这个语句来分配一个指针数组:int **m = (int **) malloc(5 * sizeof(int *));
  • 内存泄漏。

标签: c arrays matrix malloc


【解决方案1】:

改变

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

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

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

【讨论】:

  • 这可以通过使用成语int **m = malloc(5 * sizeof *m);来避免
【解决方案2】:

某些系统的指针大小可能不等于 int 的大小。在您的情况下,您假设指针的大小为 int

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

改成

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

使用后总是释放内存。这会导致内存泄漏。

使用malloc时也不要强制转换Check here

【讨论】:

    猜你喜欢
    • 2017-02-07
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    相关资源
    最近更新 更多