gpt4 book ai didi

c++ - Cstring - 调试断言失败;缓冲区太小

转载 作者:太空狗 更新时间:2023-10-29 23:40:31 26 4
gpt4 key购买 nike

我有一段代码在调试期间不断抛出“缓冲区太小”错误。

        geoGraph.size=limit;
CString xAxis ="X axis: ",yAxis="Y axis: ";

for (int x = 0; x < limit; x++)
{

xAxis.Format(_T("%s%i "),xAxis,(x+1));
yAxis.Format(_T("%s%s "),yAxis,dialog_test.str[x]);

}

xAxis.Format(_T("%s \n%s "),xAxis,yAxis);// <---Error thrown

d.SetWindowTextA(xAxis);

我得出的结论是错误是由于 Cstring xAxis 太小而无法包含新文本,我是否正确?如果正确,我该如何补救?


谢谢。

编辑:我很好奇为什么这个错误只在调试期间显示,而不是在我使用“不调试启动”(我使用 VS2008)运行应用程序时显示。

最佳答案

不!真正的问题是:

  1. xAxis Format 启动并发现需要更多空间。基于给定格式的所有参数的计算。
  2. 现在重新分配了 xAxis 存储。旧指针变得无效,在调试版本中释放并覆盖它。所以不再有 0 终止符。内存中填充了标准值的空闲内存。
  3. Format 开始并从旧指针收集(它指向的内容刚刚更改)并复制垃圾并且没有找到 0 终止符。

切勿使用格式中的 CString 作为目标和源!这可能在发布版本中有效,因为内存可能不会更改,但如果更改,则行为是未定义的。但这是一个真正糟糕的编码错误。

关于c++ - Cstring - 调试断言失败;缓冲区太小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19238293/

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