gpt4 book ai didi

c++ - 结构内部结构数组的段错误问题

转载 作者:太空宇宙 更新时间:2023-11-04 00:55:11 26 4
gpt4 key购买 nike

编辑:第一个评论者报告说代码没有明显错误,所以我用更多代码修改了帖子。为长度道歉。同样,错误似乎是当我在子结构中引用字符串变量时...请注意,如果我删除了导致段错误的第一个写入,稍后由于写入另一个字符串变量而导致段错误。请注意,在这种情况下,子结构的其他元素(例如 double Volume)已正确写入,没有运行时错误。

编辑 2:根据 Dave 的建议,我在启用调试的可执行文件上运行了 Valgrind。它吐出的是:

编辑 3:显然我有一个 malloc 版本,而不是初始化程序中的直接数组。删除它可以解决问题。我会把这个归功于 Dave,因为 valgrind 正在帮助我修复各种其他内存泄漏/问题!不过还是谢谢你的帮助....

第 36 行是它失败的那一行(下面有评论)

--删除代码以防止传播

我在 main 中声明了我的顶级结构 (sim_t) 的一个实例。一旦我尝试写入子结构内的字符串,程序就会出现段错误。写入子结构的其他变量,例如当我在 GDB 中运行程序时, double 、整数等似乎正确执行。

似乎我在这里遗漏了一些明显的东西。有人看到这段代码有问题吗?

(郑重声明,请不要对大小写发表评论,我遵循 MSDN 的命名约定标准。)

最佳答案

您在每次迭代时将“boxX_start.pdb”添加到 stringstream 而没有清除流。如果 NUMBEROFBOXES 值很大,内存使用量可能会很快增加。试试这个

void InitSimpleVars(sim_t & MySim)
{
std::stringstream in;

MySim.StartTime = clock();

//INITIALIZE Box Sim Vars...
for (unsigned int BoxNumber = 0; BoxNumber < NUMBEROFBOXES; BoxNumber++)
{
in.str("");
in << "box" << BoxNumber << "_start.pdb";
MySim.Box[BoxNumber].InitialConfigPDB = in.str(); //SEGFAULT HERE, according to GDB
}
}

加入 in.str("");清除流。可能有更好的清除方法,但我不知道是否有。

关于c++ - 结构内部结构数组的段错误问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5313433/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com