C++运行报[1] 41387 illegal hardware instruction错误如何解决
问题分析与修复方案
存在的4个核心错误
- 缺少必要头文件:使用
std::cout/std::cin需要引入<iostream>头文件,使用std::string需要引入<string>头文件,缺少头文件属于非标准写法,会导致部分编译器编译失败或运行异常。
- 缺少必要头文件:使用
- 字符串越界访问:C++
std::string的下标从0开始计数,最后一个有效字符的下标是长度-1。你在isFeminine函数中直接用countryName[countryName.length()]访问,已经超出了字符串的合法内存范围,属于未定义行为,是触发硬件报错的核心原因。
- 字符串越界访问:C++
- 函数无有效返回值:
masculineExceptions声明为返回std::string类型,但遍历完异常列表调用isFeminine后,没有加return语句把结果返回,调用方会拿到非法的垃圾值,也会触发未定义行为。
- 函数无有效返回值:
- 异常列表遍历不完整:你定义的特殊阳性国家数组有6个元素,但for循环只判断到i<5,最后一个
zimbabwe永远不会被匹配到,属于逻辑漏洞。
- 异常列表遍历不完整:你定义的特殊阳性国家数组有6个元素,但for循环只判断到i<5,最后一个
修正后的完整代码
#include <iostream> #include <string> using namespace std; string isFeminine(string countryName) { // 修正下标:取最后一个字符用 length()-1 if (countryName[countryName.length() - 1] == 'e') { string country = "la " + countryName; cout << country << endl; return country; } else { string country = "le " + countryName; cout << country << endl; return country; } } string masculineExceptions(string countryName) { string masculineExceptions[] = {"belize", "cambodge", "mexique", "mozambique", "zaire", "zimbabwe"}; // 修正循环上限:6个元素对应i从0到5,判断条件改为i<6 for (int i = 0; i < 6; i++) { if (countryName == masculineExceptions[i]) { string country = "le " + masculineExceptions[i]; cout << country << endl; return country; } } // 补全return语句,返回isFeminine的执行结果 return isFeminine(countryName); } int main() { cout << "Enter Country Name: "; string countryName; cin >> countryName; masculineExceptions(countryName); return 0; }
内容的提问来源于stack exchange,提问作者sinafarheidar12
相关产品推荐
相关产品推荐

