我在运行时遇到了一种奇怪的错误

Posted

技术标签:

【中文标题】我在运行时遇到了一种奇怪的错误【英文标题】:I'm getting a weird type of error while running 【发布时间】:2021-11-29 01:49:32 【问题描述】:

编写一个接收字符串的程序 小号 作为输入,将从字符串中删除元音 a、e、i、o、u(小写或大写)。如果两个或两个以上的元音同时出现,则程序将忽略所有这些元音。

#include <bits/stdc++.h>
#define rep(a, b, c) for (int a = b; a < c; a++)
#define vi vector<int>
using namespace std;
int main()

    bool yo;
    yo = false;
    int he;
    string s = "Heel";
    int i = 0;
    // cin >> s;
    while (i < s.length())
    

        if (s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u' || s[i] == 'A' || s[i] == 'E' || s[i] == 'I' || s[i] == 'O' || s[i] == 'U')
        

            if (s[i + 1] == 'a' || s[i + 1] == 'e' || s[i + 1] == 'i' || s[i + 1] == 'o' || s[i + 1] == 'u' || s[i + 1] == 'A' || s[i + 1] == 'E' || s[i + 1] == 'I' || s[i + 1] == 'O' || s[i + 1] == 'U')
            
                while (s[he + 1] != 'a' || s[he + 1] != 'e' || s[he + 1] != 'i' || s[he + 1] != 'o' || s[he + 1] != 'u' || s[he + 1] != 'A' || s[he + 1] != 'E' || s[he + 1] != 'I' || s[he + 1] != 'O' || s[he + 1] != 'U' || he < s.length())
                
                    he++;
                
            
            else
            
                s.erase(remove(s.begin(), s.end(), s[i]), s.end());
            
            i = i + he;
            he = 0;
        
        else
        
            i++;
        
    
    cout << s;
    return 0;

【问题讨论】:

你的错误是什么? s[he + 1] 访问未初始化的变量he,因此程序表现出未定义的行为。 【参考方案1】:

因为 s[he + 1] 到达了另一个尚未保留给 s 的内存扇区,因此您遇到了访问内存冲突。

您正在创建一种无限循环,该循环在出现任何元音时运行,并且最重要的验证是在条件结束时,它必须在存在时验证没有机会触及无效的内存扇区。

您的代码:

while (s[he + 1] != 'a' || s[he + 1] != 'e' || s[he + 1] != 'i' || s[he + 1] != 'o' || s[he + 1] != 'u' || s[he + 1] != 'A' || s[he + 1] != 'E' || s[he + 1] != 'I' || s[he + 1] != 'O' || s[he + 1] != 'U' || he < s.length())

我的建议:

he = 0;
bound = s.length() - 1;
while (he < bound && (s[he + 1] != 'a' || ... || s[he + 1] != 'U'))

  //..
  he++;

如果 he &lt; s.length() 将不会计算余数条件。

【讨论】:

以上是关于我在运行时遇到了一种奇怪的错误的主要内容,如果未能解决你的问题,请参考以下文章

子类化 UIAlertController 并遇到运行时错误

Linux升级openssl时遇到的奇怪错误

运行时 Visual C++ 10 中的奇怪异常

运行 maven 站点的奇怪问题(处理 POM 时遇到问题)

奇怪的 excel-vba 运行时错误,不会删除现有工作表

跨语言共享环境变量