c++ 运行时检查失败 #2 - 变量“ToSend22”周围的堆栈已损坏

Posted

技术标签:

【中文标题】c++ 运行时检查失败 #2 - 变量“ToSend22”周围的堆栈已损坏【英文标题】:c++ Run-Time Check Failure #2 - Stack around the variable 'ToSend22' was corrupted 【发布时间】:2011-08-09 15:01:47 【问题描述】:

我不知道为什么会这样——当我调用这个函数并向客户端发送 TCP 消息时,我得到了这个: 运行时检查失败 #2 - 变量“ToSend22”周围的堆栈已损坏。 每当客户端断开连接时。 ToSend22 是我正在做的 STD 字符串

const char *ToSend288 = ToSend22.c_str();
Client.Send(ToSend288, ToSend22.size());

为什么会这样?谢谢。

【问题讨论】:

Client.Send 是什么 API? SFML sfml-dev.org 你贴的两行代码没有问题。您的代码的问题在其他地方。对于新手来说,学习 C++ 编程最困难的事情之一是,仅仅因为错误出现在代码中的某个位置,NOT 是否意味着错误出现在代码中的那个位置。该错误通常发生在更早的某个时间。因此,如果您希望我们帮助找到问题,请发布更多代码。 我这里有5000行代码,我不能把它们都贴出来。不,我的意思是,它是一个游戏服务器,它已经完成了,只是那是错误。我该怎么办? 发送方法是您的代码吗?如果是这样,请发布,因为这可能是错误发生的地方。 【参考方案1】:

很可能Client.Send 正在修改您传递给它的char* 缓冲区。 或者同一函数中的其他局部变量以某种方式被覆盖,这会影响ToSend22 变量。这个函数肯定涉及到数组或指针的误用。

请发布更多代码。

【讨论】:

以上是关于c++ 运行时检查失败 #2 - 变量“ToSend22”周围的堆栈已损坏的主要内容,如果未能解决你的问题,请参考以下文章

我的所有变量的运行时检查失败 #2 错误

运行时检查失败 #2 - 变量“结果”周围的堆栈已损坏

运行时检查失败 #2 - 变量“primes”周围的堆栈已损坏

运行时检查失败 #2 - 变量周围的堆栈已损坏

运行时检查失败 #2 - 变量“l1”周围的堆栈已损坏

运行时检查失败 #2 - 变量“索引”周围的堆栈已损坏