gpt4 book ai didi

c++ - 免费(): invalid pointer when adding string

转载 作者:太空狗 更新时间:2023-10-29 23:49:01 25 4
gpt4 key购买 nike

这段代码工作正常:

void sendToOne(int fd, string message)
{
message += "$";
char* S = new char[message.length()];
strcpy(S, message.c_str());
write(fd, S, message.length());
}

但是当我添加零钱时:

void sendToOne(int fd, string message)
{
string msg2 = message + "$";
char* S = new char[msg2.length()];
strcpy(S, msg2.c_str());
write(fd, S, msg2.length());
}

我收到:free(): invalid pointer 错误。你能解释一下为什么会这样吗?

最佳答案

您的代码中有缓冲区溢出写入:

char* S = new char[msg2.length()];
strcpy(S, msg2.c_str());

第一行为 msg2 中的字符分配了足够的空间,但第二行复制了所述字符(假设没有嵌入 NUL) 最后的 NUL 字节(总共比你分配的多一个字节)。如果你运气不好,并且在分配结束时没有松弛字节,你通常会覆盖后续分配(或空闲列表中的条目)之前的分配器元数据字节;当分配器尝试使用它们时,它(如果你“幸运”的话)会尝试读取无效内存并立即死亡;如果您“不走运”,它恰好指向您的进程可用的随机内存,但可能不是正确的位置,并且您会逐渐受到越来越多的损坏,直到一切都爆炸。

综上所述,这样做有点傻。直接写string的数据即可:

string msg2 = message + "$";
write(fd, msg2.c_str(), msg2.length());

这也避免了在没有智能指针管理或匹配调用 delete[] 的情况下使用 new 造成的内存泄漏。

关于c++ - 免费(): invalid pointer when adding string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48088119/

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