gpt4 book ai didi

C++ 返回字符串导致 free() : invalid pointer error

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

在 Linux Mint 17 32 位计算机上使用 g++ v4.8.2,以下工作正常。在 32 位 Ubuntu 12.04 上也能正常工作。

...
string sdata;
sdata = decodeRec(bufp);
...

string Part::decodeRec(unsigned char *recp) {
string line="";
uint16_t typec;
memcpy(&typec, recp, 2);
recp += 2;
string sTypec = convertTypeToText(typec) + " ";
line += sTypec;
// ... decode more fields in record, add string values to line
return line;
}

但是转移到使用 g++ 4.8.3 的 64 位 Fedora 计算机时,程序崩溃并显示以下内容:

free(): invalid pointer: 0x000000000060f6e8 ***
======= Backtrace: =========
/lib64/libc.so.6[0x3a08c75a4f]
/lib64/libc.so.6[0x3a08c7cd78]
/lib64/libstdc++.so.6(_ZNSsD1Ev+0x43)[0x3a170be1c3]
/home/myprogram[0x4072df]
...

这是“返回线”;失败的陈述。似乎某个字符串库例程不止一次试图释放指针。我没有在我的程序中执行任何 malloc() 或 free()。在调试过程中,我还看到了这个错误:“double free or corruption”。

问题是字符串变量line是栈上的临时自动变量,return越来越乱?如果是这样,纠正此问题的最佳方法是什么?

我应该做“静态字符串行;”吗?还是使用实例变量来保持行?或者使用字符串 line = new("");

究竟发生了什么,我该如何解决?

最佳答案

这里的这一行可能不好

memcpy(&typec, recp, 2);

你确定 recp 至少有 2 个字节长吗?

通常返回时崩溃意味着内存在函数执行期间损坏,不一定是在返回语句期间

关于C++ 返回字符串导致 free() : invalid pointer error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26953023/

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