访问已分配内存时的分段代码
Segmentation code when accessing allocated memory
我需要用随机元素填充稀疏矩阵。我正在尝试获取随机元素并将它们写入其数组的值、列和行元素,但我将 运行 保留为分段错误。
只有当我设置 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;
}
m.val = malloc(sizeof(int) * size);
m.val = malloc(sizeof(int) * size);
m.val = malloc(sizeof(int) * size);
你永远不会 malloc m.col 和 m.row :-) 剪切和粘贴编程是邪恶的...
你给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);
我需要用随机元素填充稀疏矩阵。我正在尝试获取随机元素并将它们写入其数组的值、列和行元素,但我将 运行 保留为分段错误。
只有当我设置 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;
}
m.val = malloc(sizeof(int) * size);
m.val = malloc(sizeof(int) * size);
m.val = malloc(sizeof(int) * size);
你永远不会 malloc m.col 和 m.row :-) 剪切和粘贴编程是邪恶的...
你给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);