动态分配的向量

Dynamically allocated vector

提问人:Teutz 提问时间:12/1/2022 更新时间:12/1/2022 访问量:26

问:

我需要制作一个程序,其中我有一个矩阵的向量(三重指针),所有矩阵都是动态分配的。此外,在另一个矩阵中,我需要保留矩阵的维度。问题是,在我输入第二个矩阵的值后,我不断收到此错误:分段错误(核心转储)。谁能帮忙?我在截止日期前非常紧张。以下是大部分代码:

#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 上。有什么想法吗?

c 动态 malloc realloc

评论

0赞 Armali 12/2/2022
只有大部分代码是不够的。- 编译时没有收到警告吗?

答: 暂无答案