很抱歉让每个人都讨厌,但这给我带来了一些痛苦。这是代码:
char buf[500];
sprintf(buf,"D:\\Important\\Calibration\\Results\\model_%i.xml",mEstimatingModelID);
mEstimatingModelID是一个整数,当前保持值为0。
很简单,但调试显示正在发生这种情况:
0x0795f630 "n\Results\model_0.xml"
即。它缺少字符串的开头。
有什么想法吗?这很简单,但我无法弄清楚。
谢谢!
答案 0 :(得分:3)
努力使其成为一个实际的一般答案:以下是类似错误的清单:
永远不要相信您在发布模式下看到的内容,尤其是从堆栈内存中分配的局部变量。堆数据中存在的静态变量是唯一通常是正确的,但即便如此,也不要相信它。 (以上用户的情况如此) 根据我的经验,VS的最新版本具有不太可靠的发布模式数据(可能b / c它们在发布时优化得更多,或者可能是64位或其他)
始终确认您正在检查正确函数中的变量。在更高的函数中有一个名为“buf”的变量很容易,其中包含一些未初始化的垃圾。这很容易与下部子程序/函数中的相同命名变量混淆。
仔细检查缓冲区溢出始终是个好主意。如果您在sprintf中使用%s,则可能获得缓冲区溢出。
检查您的类型。 sprintf具有很强的适应性,当你想要一个int时,你可以通过传入一个字符串指针轻松获得一个非崩溃但奇怪的结果。