【发布时间】: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