gpt4 book ai didi

c++ - 我的主 C++ 文件中的文本(在尚未执行的代码中)如何显示在字符串中?

转载 作者:行者123 更新时间:2023-11-27 23:30:30 25 4
gpt4 key购买 nike

我是 C++ 的新手,所以有很多我不太了解的地方,我试图缩小我获得 exc_bad_access 的方式,但我尝试打印出值似乎加剧了(或导致)问题!

#include <iostream>
#include "SI_Term.h"
#include "LoadPrefabs.h"

int main() {
SI_Term * velocity = new SI_Term(1, "m/s");
std::cout<<"MAIN: FIRST UNITS "<<std::endl;
velocity->unitSet()->displayUnits();
return 0;
}

上述代码甚至在 std::cout<< 行出现之前就产生错误 (EXC_BAD_ACCESS)。我用 xcode 跟踪它,它在对 new SI_Term(1, "m/s") 的函数调用中失败。

重新运行 cout 行,注释掉它运行并完成。我会附上更多代码,但我有很多代码,但我不知道与这条似乎向后偷偷摸摸并覆盖指针的行有什么关系。谁能帮我看看在哪里或如何调试它?

新信息:我把它缩小到这个 block 。我应该在这一点上解释一下,这个 block 试图分解一组以 kg*m/s^2 格式编写的物理单位,并将其分解为 kg,m,除以 s * s。一旦某些东西被分解,它就会使用 LoadUnits(const char*) 从文件中读取。我假设(在这一点上是正确的)任何单位字符串都不会包含接近我限制的 40 个字符。

UnitSet * decomposeUnits(const char* setOfUnits){
std::cout<<"Decomposing Units";
int i = 0;
bool divide = false;

UnitSet * nextUnit = 0;
UnitSet * temp = 0;
UnitSet * resultingUnit = new UnitSet(0, 0, 0, 1);

while (setOfUnits[i] != '\0') {
int j = 0;
char decomposedUnit[40];
std::cout<<"Wiped unit."<<std::endl;
while ((setOfUnits[i] != '\0') && (setOfUnits[i] != '*') && (setOfUnits[i] != '/') && (setOfUnits[i] != '^')) {
std::cout<<"Adding: " << decomposedUnit[i]<<std::endl;
decomposedUnit[j] = setOfUnits[i];
++i;
++j;
}
decomposedUnit[j] = '\0';
nextUnit = LoadUnits(decomposedUnit);
//The new unit has been loaded. now check for powers, if there is one read it, and apply it to the new unit.

//if there is a power, read the power, read the sign of the power and flip divide = !divide
if (setOfUnits[i] == '^') {
//there is a power. Analize.
++i;++j;
double power = atof(&setOfUnits[i]);
temp = *nextUnit^power;
delete nextUnit;
nextUnit = temp;
temp = 0;
}
//skip i and j till the next / or * symbol.
while (setOfUnits[i] != '\0' && setOfUnits[i] != '*' && setOfUnits[i] != '/') {
++i; ++j;
}

temp = resultingUnit;

if (divide) {
resultingUnit = *temp / *nextUnit;
} else {
resultingUnit = *temp * *nextUnit;
}
delete temp;
delete nextUnit;
temp = 0;
nextUnit = 0;

// we just copied a word and setOfUnits[i] is the multiply or divide or power character for the next set.
if (setOfUnits[i] == '/') {
divide = true;
}

++i;

}
return resultingUnit;
}

最佳答案

我很想说 SI_Term 正在弄乱堆栈(或者可能在破坏堆)。这是一个很好的方法:

char buffer[16];
strcpy(buffer, "I'm writing too much into a buffer");

您的功能可能会完成,但随后会造成严重破坏。检查堆栈中的所有数组,确保没有超出范围。

然后应用标准调试实践:一个一个地删除代码,直到它不再崩溃,然后开始恢复它以找到您的罪魁祸首。

关于c++ - 我的主 C++ 文件中的文本(在尚未执行的代码中)如何显示在字符串中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5780469/

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