提问人:Teutz 提问时间:12/1/2022 更新时间:12/1/2022 访问量:26
动态分配的向量
Dynamically allocated vector
问:
我需要制作一个程序,其中我有一个矩阵的向量(三重指针),所有矩阵都是动态分配的。此外,在另一个矩阵中,我需要保留矩阵的维度。问题是,在我输入第二个矩阵的值后,我不断收到此错误:分段错误(核心转储)。谁能帮忙?我在截止日期前非常紧张。以下是大部分代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "function.h"
#define DEFAULT_CAPACITY 1
int main() {
int capacity = DEFAULT_CAPACITY, size = 0, i, j, k;
int **v = (int **)malloc(DEFAULT_CAPACITY * sizeof(int **));
int **dim = alloc_matrix(capacity,2);
char letter;
printf("Citire litera ");
scanf(" %c",&letter);
while(letter!='Q') {
if(letter=='L') {
int n,m;
scanf("%d %d", &n, &m);
int **a = alloc_matrix(n,m);
read_matrix(n, m, a);
if(size >= capacity) {
capacity = capacity * 2;
int ***tmp;
tmp = (int *)realloc(v, capacity * sizeof(int **));
if(!tmp) {
fprintf(stderr, "realloc() failed\n");
free(v);
return -1;
}
v = tmp;
void *pointer;
pointer = realloc(dim, capacity * sizeof(int *));
dim = pointer;
}
dim[size][0] = n;
dim[size][1] = m;
v[size++] = a;
if(size < capacity) {
capacity = size;
int **tmp = (int **)realloc(v, capacity * sizeof(int **));
if(!tmp) {
fprintf(stderr, "realloc() failed\n");
free(v);
return -1;
}
v = tmp;
void *pointer;
pointer = realloc(dim, capacity * sizeof(int *));
dim = pointer;
}
free_matrix(n, a);
}
int **alloc_matrix(int n, int m) {
int *a = (int *)malloc(n * sizeof(int *));
if(!a) {
fprintf(stderr, "malloc() failed\n");
return NULL;
}
for(int i = 0; i < n;i++) {
a[i] = (int *)malloc(m * sizeof(int));
if(!a) {
fprintf(stderr, "malloc() failed\n");
while(--i >= 0) {
free(a[i]);
}
free(a);
return NULL;
}
}
return a;
}
void read_matrix(int n, int m, int **a) {
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
scanf("%d", &a[i][j]);
}
}
}
我想问题出在暗淡矩阵的 realloc 上。有什么想法吗?
答: 暂无答案
评论