gpt4 book ai didi

c++ - push_back 在 VC6 中失败

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:00:20 26 4
gpt4 key购买 nike

我知道 VC6 是 20 世纪的技术,但由于某些特殊原因,我不得不使用它。

我有以下代码,它在 Visual Studio Express 2008(32 位)中运行良好

while( sqlite3_step( stmt ) == SQLITE_ROW ) {
int tmp;
tmp = sqlite3_column_int64( stmt, 0 );
if(DEBUG) { cout << "KeyID - " << tmp << endl ; };
keyIDs.push_back(tmp);
if(DEBUG) { cout << "Size keyIDs - " << keyIDs.size() << endl ; };
}

在这个特定的测试用例中,只有一条记录,所以正如您所料,输出是

KeyID - 1
Size keyIDs - 1

但是,如果我用 VC6(32 位)编译整个东西(包括 sqlite3),我会得到以下结果:

KeyID - 1
Size keyIDs - 0

keyIDs 定义为

vector<sqlite3_int64> keyIDs;

但我们甚至尝试将其更改为

vector<int> keyIDs;

我对可能出错的地方已经没有想法了,所以我什至接受疯狂的猜测?

编辑:

我们通过使用局部 vector (keyIDs 是类成员)解决了这个问题。不知何故,我不觉得跟踪的其他地方的一些代码(可能)破坏了 vector ,使其变得无用。为什么这只发生在 VC6 上?这仍然是个谜。

编辑2:

虽然我还没有找到根本原因,但我确实发现了另一个问题(在不同的项目中),一个大字符串(2800 多个字符)传递给了一个函数。该函数本身收到类似

的内容
function("something"+largestring+"anotherstring")

这导致了其他地方的内存异常(巧合的是,有一个 vector )。它通过做解决了

largestring = "something";
largestring += stuff;
largestring += "anotherstring";

function (largestring);

综上所述,VC6 在堆中创建大对象时似乎出了点问题,这可能会破坏内存。

我希望这能帮助像我一样受困于 VC6 并发现隐蔽错误的人。

最佳答案

在 Visual Studio 6 中,整数是 32 位。

尝试使用 __int64 作为数据类型。

关于c++ - push_back 在 VC6 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8949006/

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