【问题标题】:Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted运行时检查失败 #2 - 变量“a”周围的堆栈已损坏
【发布时间】:2013-12-13 19:13:11
【问题描述】:

我无法理解为什么在这里收到错误消息。 我认为这可能与尝试访问数组中不存在的地方有关? (虽然我看不到我在哪里这样做) 当程序运行时,它将返回正确的答案,但随后以运行时错误关闭。将不胜感激任何帮助和一般建议,以避免将来出现这些问题。谢谢

int len(char s[]){
        int len = 0;
        while (s[len] != 0) len++;
        return len;
    }

int isPalindorme(char s[]){
    int length = len(s);
    int limit = length / 2.0 + 0.5;
    for (int i = 0; i < limit; i++){
        if (s[i] != s[length - i -1]){
            return 0;
        }
    }
    return 1;
}

void main(){
    char a[] = "";
    cin >> a;
    cout << len(a) << endl;
    cout << isPalindorme(a);

}

【问题讨论】:

  • 你知道了,a 的大小只有 1,但你只是将任何旧内容读入其中。您可能会认为 C++ 允许您这样做令人惊讶,但它确实如此。

标签: c++ stack runtime-error


【解决方案1】:

a 指向一个只有 1 字节大小的缓冲区(空终止符),因此 cin 在将数据复制到该地址时会丢弃堆栈。

您应该改用std::string(或使缓冲区更大)。

【讨论】:

  • 谢谢。那么我将如何初始化 'std::string' 以便我可以将其作为用户的输入接收?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 2013-12-10
  • 2015-02-09
  • 2015-05-24
  • 2021-12-31
  • 2014-10-20
  • 2014-07-01
相关资源
最近更新 更多