【问题标题】:Segmentation code when accessing allocated memory访问分配的内存时的分段代码
【发布时间】:2015-03-27 22:25:59
【问题描述】:

我需要用随机元素填充稀疏矩阵。我试图获取随机元素并将它们写为其数组的值、列和行元素,但我一直遇到分段错误。

只有当我设置 N=1000 然后 SIZE=10000 时才会发生这种情况(因为如果我设置 SIZE=1000 或更小,它会起作用)。

这是否意味着我无法分配所有这些内存或在分配后访问它?

如果我真的需要分配所有这些内存 (SIZE=10'000),我该怎么办?有人可以帮我吗?

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

typedef struct _matrix {
    int size;       //number of not-null elements
    int ord;       //order of matrix
    int* val;
    int* col;
    int* row;
} matrix;

matrix init (int ord, int size)
{
    matrix m;
    m.ord = ord;
    m.size = size;

    m.val = malloc(sizeof(int) * size);
    m.val = malloc(sizeof(int) * size);
    m.val = malloc(sizeof(int) * size);
    return m;
}

matrix fill_matrix (int ord)
{
    int i, j, gap, size = ord * ord / 100;
    matrix new_matrix = init(ord, size);

    j = 1;
    for (i = 0; i < size; i++) {
        new_matrix.val[i] = rand() % 9 + 1;
        new_matrix.col[i] = rand() % ord + 1;        //<------SEGFAULT
        new_matrix.row[i] = rand() % ord + 1;
        j++;
    }
    return new_matrix;
}

int main()
{
    matrix A;
    int n = 1000;
    A = fill_matrix(n);
    return 0;
}

【问题讨论】:

    标签: c arrays dynamic segmentation-fault


    【解决方案1】:

    您分配给val 3 次,但从未初始化其他两个指针。

    m.val = malloc(sizeof(int) * size);
    m.val = malloc(sizeof(int) * size);
    m.val = malloc(sizeof(int) * size);
    

    我猜你是这个意思:

    m.val = malloc(sizeof(int) * size);
    m.col = malloc(sizeof(int) * size);
    m.row = malloc(sizeof(int) * size);
    

    【讨论】:

      【解决方案2】:
      m.val = malloc(sizeof(int) * size);
      m.val = malloc(sizeof(int) * size);
      m.val = malloc(sizeof(int) * size);
      

      你永远不会 malloc m.col 和 m.row :-) 剪切和粘贴编程是邪恶的......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-29
        • 1970-01-01
        • 2018-05-15
        • 2015-03-08
        • 1970-01-01
        • 1970-01-01
        • 2012-08-24
        • 1970-01-01
        相关资源
        最近更新 更多