【发布时间】:2023-03-02 22:38:01
【问题描述】:
我正在尝试将文件发送到一个函数,该函数创建一个名为 Entry 的结构矩阵,根据文件填充它,然后返回矩阵。现在,如果需要,我可以添加一系列错误,但我怀疑我只是犯了多个愚蠢的错误。如果有一种不涉及 malloc 的更简单的方法,那也可以。
我做错了什么,我该如何正确地做到这一点?
以下是相关代码:
Entry **matCreate(FILE *fp){
// initialize matrix
Entry matrix = malloc(states * N_CC * sizeof(Entry));
// populate the matrix with initial values
for (int i = 0; i < states; i++) {
for (int j = 0; j < N_CC; j++) {
matrix[i][j].next = 99;
matrix[i][j].action = "D";
}
}
return matrix;
}
在主函数中:
Entry **matrix = matCreat(fp);
我开始使用该功能
Entry **matCreate(FILE *fp){
初始化它
Entry (*matrix)[N_CC] = malloc( states * sizeof *matrix );
填充它:
for (int i = 0; i < states; i++) {
for (int j = 0; j < N_CC; j++) {
matrix[i][j].next = 99;
matrix[i][j].action = "D";
}
}
然后从 main 获取它: 输入 ourMat = (*matCreate(fp))[N_CC];
但仍然收到错误: tokenize.c:84:1: 警告:从不兼容的指针类型返回 [默认启用]
我哪里出错了?
【问题讨论】:
-
编译时是否知道 N_CC?
-
是的,是头文件中定义的常量。
-
Entry **与二维数组不兼容;你想要哪个?
标签: c matrix malloc multidimensional-array