gpt4 book ai didi

c++ - 查找内存分配错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:01:05 25 4
gpt4 key购买 nike

我在以下简化代码中遇到内存分配错误(以及随后的崩溃):

std::wstring myKey = L"str_not_actually_constant";

MyType obj;
Read( obj );

std::map<std::wstring, MyType> myMap;
myMap[myKey] = obj; // Sometimes allocation error (1)
...
Read( MyType& obj )
{
obj.member1 = ReadFromFuncThatMayBeProblem();
obj.member2 = ReadFromFuncThatMayBeProblem(); // Sometimes allocation error (2)
/* more members */
}
...
void operator =( const MyType& source )
{
if( this != &source )
{
member1 = source.member1; // std::wstring
member2 = source.member2; // Usually (1) happen on the second member. // std::wstring
/* more members */
}
}

发生 (1) 或 (2)。

现在,如果我不顾错误继续(使用调试器),该值确实已输入到映射中。

我不知道 ReadFromFuncThatMayBeProblem() 是否是罪魁祸首,但这是一个相当复杂的函数,我不能在这里透露。

此外,这是在应用程序的其他部分被移植为使用 OpenSSL 之前已经工作(或至少看起来可以工作)的代码。不过,我不知道这是否对这里有任何影响。

那么,我可以做些什么来追踪这个分配错误,因为我假设上面的代码实际上不是问题所在?

编辑:更多信息:MyType 没有 dtor。

但是,MyType 有一个 SecondType 类型的成员,它有一个 void* 成员。这将在该类型的析构函数中被删除和清空。构造函数使用 m_pData = new std::wstring( ( (std::wstring )source.m_pData) );对于字符串。 (其他数据类型也类似)。这可能是个问题吗? (删除 static_cast< std::wstring* >( m_pData );)

MyType的其他成员类型有std::wstring、unsigned long、bool、enum、structs(其中timeb)和SecondType。

最佳答案

终于找到错误了。

我们将上述功能用作使用 OpenSSL 的更大套接字通信的一部分(因此以上引用)。套接字按照上面的代码简化写入数据和读取数据。

读取套接字的方式是我们将内存从一个缓冲区重新分配到另一个缓冲区(动态更改大小)。在执行此操作时,我们使用缓冲区的输入和我们应该扩展的大小。大小计算使用模数来计算调整大小的因子。这导致缓冲区太大或太小而无法容纳以下操作。

两天的调试,将“%”更改为“/”。

谢谢大家的支持。

关于c++ - 查找内存分配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2085211/

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