【问题标题】:Error Using Realloc() and pointers使用 Realloc() 和指针时出错
【发布时间】:2014-05-19 02:45:20
【问题描述】:

我一直在编写一个程序,但在运行时遇到了一些问题。 要读取的文件包含 11 列,但要读取的行数未指定。

我一直在使用 realloc() 来创建动态内存来更改读取的输入文件。但是,在运行程序时,我收到以下跟踪。我不知道这意味着什么,也不知道如何解决它。该程序编译得很好,但中止到内存转储和此屏幕。如果需要,我可以上传整个代码,但是它很长。

 do //Safe to assume atleast one line of information will be present
{
    j++;
    if(j>5) //Will resize the array if there are more than 5 rows
    {
        Poke = realloc(Poke, j * 100); //* 100 needed to account for strings
        Type = realloc(Type, j * 100);
        Height = realloc(Height,j);
        Weight = realloc(Weight,j);
        HP = realloc(HP, j);
        Attack = realloc(Attack, j);
        Defense = realloc(Defense, j);
        SPA = realloc(SPA, j);
        SPD = realloc(SPD, j);
        Speed = realloc(Speed, j);
        Evo = realloc(Evo, j * 100);
    }

    //Read and store all values
    fscanf(ifp, "%s %s %f %f %i %i %i %i %i %i %s", (Poke + 100*j),
    (Type + 100*j),(Height + j),(Weight + j),(HP + j),(Attack + j),
    (Defense + j),(SPA + j),(SPD + j),(Speed + j),(Evo + 100*j));
} while(!feof(ifp));

其中 Poke、Type 和 Evo 都是字符点 身高和体重是浮动的 在整数中休息

来自文件的输入数据是这种形式

Charmander  Fire        0.6     8.5     39  52      43      60      50      65      Charmeleon
Bulbasaur   Grass       0.7     6.9     45  49      49      65      65      45      Ivysaur

【问题讨论】:

  • 除非您发布有问题的代码的一部分,否则我认为没有人可以帮助您。
  • 临时猜测,您正在编写外部分配的地址。正如chrk所说,需要看代码才能说更多。
  • 您可能会从valgrind 获得更有用的故障转储。
  • 调试此类问题包括: 1) 删除行直到问题消失; 2)运行valgrind之类的工具; 3)在你的代码中加入大量的打印语句,看看值是什么——最后打印的是什么。
  • 您可能应该使用结构数组而不是 11 个并行数组。它会让事情变得更容易理解——对于你和任何试图理解你的代码的人来说。

标签: c file-io runtime-error realloc


【解决方案1】:

错误似乎是说您传递了零作为 realloc (realloc(): invalid next size: 0x00000000) 的大小。您的代码是否会错误地尝试将新大小设置为无效?在调用 realloc 之前尝试打印出大小,并确保它是您所期望的。

如果不是这样,那么至少显示调用 realloc 的代码部分会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多