【问题标题】:why does this code give a access violation when run on msdev?为什么这段代码在 msdev 上运行时会出现访问冲突?
【发布时间】:2009-07-16 11:54:04
【问题描述】:

while(*a++ = *b++){} 其中 a 和 b 是有效的字符指针。

【问题讨论】:

    标签: c pointers


    【解决方案1】:

    如果 b 是一个 10 个字符的以空字符结尾的字符串,而 a 是一个分配了 4 个字符的缓冲区,则您将使用上述代码在分配的内存之外进行写入。

    【讨论】:

      【解决方案2】:

      另一种答案:

      char *a = "Hello";
      char *b = "World";
      

      这些都是有效的字符指针。但是 a 并不指向可写内存。

      【讨论】:

        【解决方案3】:

        指向的字符串可能不是以空值结尾的,这意味着正在从它不应该访问的内存中读取数据并将其分配给它,因此违反了。

        【讨论】:

          【解决方案4】:

          看起来为数组“a”分配的内存小于数组“b”的长度。

          【讨论】:

            【解决方案5】:

            如果您在 MSDev 上运行它,请将其放入调试器中并单步执行,和/或查看存储 a 和 b 的实际内存区域并直接查看发生了什么。它可以是任何已经提到的可能性。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-08-25
              • 2023-02-08
              相关资源
              最近更新 更多