c – 声明硬编码的std :: string会导致缓冲区溢出

c – 声明硬编码的std :: string会导致缓冲区溢出,第1张

概述我的程序中有以下行导致运行时警告: if (!is_directory("C:\\NGFMS_Debug\\Files") && !create_directories("C:\\NGFMS_Debug\\Files")) 警告的文本​​如下:“XXX.exe中发生了缓冲区溢出,已损坏程序的内部状态.” 警告来自对“is_directory(…)”的调用.我猜测字符串的空间没有被分配,但我认为这样 我的程序中有以下行导致运行时警告:
if (!is_directory("C:\NGFMS_DeBUG\files") && !create_directorIEs("C:\NGFMS_DeBUG\files"))

警告的文本​​如下:“XXX.exe中发生了缓冲区溢出,已损坏程序的内部状态.”

警告来自对“is_directory(…)”的调用.我猜测字符串的空间没有被分配,但我认为这样的语法是合法的.

is_directory函数是boost / filesystem.hpp的一部分,我使用以下命名空间:

using namespace boost;using namespace boost::filesystem;using namespace std;

这是在VS2005 C下编译的.有任何想法吗?

更新

我尝试了几个不同的东西并逐步完成了代码,这就是我发现的内容.

如果我这样做

char* path_chars_c;path_chars_c = "C:\DeBUG\files";string path_str_c(path_chars_c);

变量path_chars_c包含适当的字符串,但变量path_str_c在初始化后包含垃圾.所以看起来字符串初始化在这里被打破了.有没有人见过这个?

解决方法 这是一个令人惊讶的错误 – 这似乎是一个非常标准的使用boost :: filesystem :: is_directory().您是否尝试过使用调试器来查看问题发生的位置?

一种(远程)可能性浮现在脑海中 – 如果您将启用了NDEBUG的库与禁用NDEBUG的库链接起来,则可能会遇到麻烦.特别是,一些boost数据类型将在打开调试时分配一些额外的调试字段.因此,如果一个对象是由一段代码创建的,它认为调试已关闭,但后来被认为调试打开的另一段代码使用,则可能会出现随机内存错误(例如缓冲区溢出).

总结

以上是内存溢出为你收集整理的c – 声明硬编码的std :: string会导致缓冲区溢出全部内容,希望文章能够帮你解决c – 声明硬编码的std :: string会导致缓冲区溢出所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1240943.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存