【问题标题】:Allocated memory - Struct with array already alloc分配的内存 - 带有数组的结构已经分配
【发布时间】:2020-02-11 09:56:45
【问题描述】:

我有以下示例:

#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

例如

【问题讨论】:

  • 到目前为止我只查看了代码...始终确保 malloc 没有返回 NULL。特别是考虑到您正在从文件中读取的事实,您可能会耗尽内存。总是假设你可能会用完内存:)

标签: c malloc allocation


【解决方案1】:

这一行:

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

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

试试

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

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

【讨论】:

  • 嗯.. 不,他没有>
  • @kaldoran 你在编译器中使用标志-Wall -Wextra 吗?适用于 gcc g++ 和 clang(也可能是其他编译器)
猜你喜欢
  • 2017-07-26
  • 1970-01-01
  • 2018-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-21
  • 2021-05-29
相关资源
最近更新 更多