c - 已分配的内存 - 已分配数组的结构

标签 c malloc allocation

我有以下示例:

#define MAX_SIZE 32 

typedef struct T {
     int total_data;
     D *data;
} T;

typedef struct D {
     int type;
     char value[MAX_SIZE];  
} D;

我有一个提取和填充 D* 数据的部分; 以及打印它的人。

提取和填充D部分从文件中提取数据。

void extract(T *_t) {
     // Open file
     fscanf(fp, "%d\n", &_t->total_data);
     _t->data = malloc(_t->total_data * sizeof(*_t->data);

     // Extract and fill 
     for ( i = 0; i < _t->total_data; i++) 
         fscanf(fp, "%d:%[^$]\n", &(_t->data[i].type), _t->data[i].value);
 }

读取的函数如下所示:

void read(T *_t) {
    int i; 
    for( i = 0; i < _t->total_data; i++) 
         printf("%d - %s", _t->data[i].type, _t->data[i].value);
}

但是我遇到了崩溃.. 我不知道为什么..根据我在网上找到的内容,代码看起来对我来说没问题。 请你帮助我好吗 ?

谢谢。

文件看起来像这样:

2
0:ABC
1:DEFGHI

例如

最佳答案

这一行:

fscanf(fp, "%d\n", _t->total_data);

无效。 _t->total_data 是一个 int,但您需要一个指向 int 的指针才能扫描数据。

尝试

fscanf(fp, "%d\n", &_t->total_data);
                   ^
                   note

顺便说一句:你的编译器没有对此发出警告吗?

关于c - 已分配的内存 - 已分配数组的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58382470/

相关文章:

swift - 如果一个函数返回一个 UnsafeMutablePointer,我们有责任销毁和释放吗?

c - 解析中的段错误

c - 分配失败时释放多维数组

c - 函数内动态重新分配 - C

c - malloc 函数在 C 程序中无法正常工作。程序崩溃

c++ - 为什么编译器在 vector 已满时不尝试分配连续内存(如果可能)?

c++ - C/C++即时输入

c++ - segmentation 故障的常见原因的明确列表

c++ - 无法通过 SSL 将示例程序绑定(bind)到 LDAP 服务器(ldaps ://)

c++ - 零大小的分配请求