【问题标题】:Strange crashes when accessing the memory访问内存时出现奇怪的崩溃
【发布时间】:2012-05-22 15:00:12
【问题描述】:

我在 2 周前得到了这个运行良好的程序,我没有更改它现在崩溃的任何部分。

例如,以这个 sn-p 为例:(假设 is 是一个有效的 istream 并包含 <tag>

std::string Str;
char c;
for ( ; is >> c; )
{
    std::cout << c << std::flush;
    Str += c;
}

输出: &lt; 然后崩溃。

我正在使用 Windows 和 mingGW,崩溃是一个窗口说我的程序遇到错误,Windows 正在尝试修复它...

但这还不是全部,它与Str = c; 或初始化时相同:std::string Str ("op");

在我发现此错误 30 分钟后,我在一行中又收到了一个(在最初的错误之前):

osstr.write((char *) Word, 16);

其中osstr 是有效的ostringstream,Word 是填充的unsigned char *

编辑:

问题可能不在代码中。因为对字符串构造函数的简单调用会崩溃。

std::string Str ("") 有效

std::string Str ("str");崩溃

【问题讨论】:

  • 无关:不用笨拙的for循环,你可以简单地循环while(is &gt;&gt; c)
  • 您能否发布一个完整的、自包含的可编译示例来说明问题?因为我们不知道您的代码引用的任何东西实际上是什么。 (该错误可能在此代码之前运行的代码中。)
  • Works fine here,您的问题在于您没有向我们展示的代码。
  • @perelo - 错误可能在您更改的部分中。覆盖内存会在程序的其他部分产生奇怪的影响。喜欢这个。
  • 在 Windbg 下运行调试版本,您可能会比现在更早看到异常,当前指向的是近因而不是最终消亡

标签: c++ memory crash


【解决方案1】:

好的,抱歉信息不完整,但我无法给你完整的代码。

问题来自远在上述代码没有崩溃之前的缓冲区溢出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多