在C中动态填充静态数组时出错

问题描述 投票:0回答:1

我必须使用静态二维数组和动态矩阵作为我的大学学习的一部分。因此,我创建了它们,现在尝试填充它们,然后将它们打印到控制台,但是出现“段错误”。这就是我试图实现的方式:

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

#define ROWS 5
#define COLUMNS 7

int main3() {
    /*init static array*/
    double twodimarray[ROWS][COLUMNS];

    /*init dynamic array*/
    double **matrix = (double**) malloc(sizeof(double*) * ROWS);
    for(int i = 0; i < ROWS; i++) *(matrix + i) = (double*)malloc(sizeof(double) * COLUMNS);

    for(int i = 0; i < ROWS; i++){
        dfillarran(*(matrix + i), COLUMNS);
        dfillarran(twodimarray[i], COLUMNS);
    }

    puts("Dynamic matrix :");
    printmx(matrix, ROWS,COLUMNS);

    puts("Static array:");
    printmx(twodimarray, ROWS, COLUMNS);

    /*freeing mem*/
    for(int i = 0; i < ROWS; i++) free(*(matrix + i));
    free(matrix);
}

错误肯定在函数printmx()中,但我不明白为什么;它适用于动态矩阵,仅适用于静态矩阵,但不能使用静态数组名称,它是指向指针数组的指针,其中每个指针都指向值数组,就像动态数组一样!printmx()中有我的arrayutils.h函数的代码:

/**Print Matrix*/
void printmx(double** mx, int rows, int col){
    for(int i = 0; i < rows; i++) {
        for(int j = 0; j < col; j++){
            printf("%.lf ", *(*(mx + i)+j));
        }
        putchar('\n');
    }
    putchar('\n');
}

用随机值填充数组的函数可以在here中找到,arrayutils.c是我为所有其他使用相同功能的任务(如填充和打印数组)创建的,但我认为,问题不在于那里..可能是,我在理论上某个地方错了,但仍然没有得到静态矩阵和动态矩阵之间的区别,请纠正我:)

p.s。有错误的屏幕截图:there is an error

c arrays dynamic-memory-allocation
1个回答
1
投票

对于不同类型的两个对象,可能无法调用功能printmx。>>

数组twodimarray是一个二维数组,当传递给函数时,其类型为double ( * )[COLUMNS]

虽然矩阵是类型为double **的指针。

© www.soinside.com 2019 - 2024. All rights reserved.