2015-01-28 2 views
0

무작위 요소로 희소 행렬을 채울 필요가 있습니다. 임의의 요소를 가져 와서 배열의 값, 열 및 행 요소로 쓰려고하지만 세그먼트 오류가 계속 발생합니다.할당 된 메모리에 액세스 할 때 분할 코드

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; 
} 

답변

2

당신은 val 세 번에 할당하지만 다른 두 포인터를 초기화하지 .

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

m.val = malloc(sizeof(int) * size); 
m.val = malloc(sizeof(int) * size); 
m.val = 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을 ...

관련 문제