分段错误中的分隔符匹配(核心转储)
Delimiter matching in segmentation fault (core dumped)
我在运行程序时不断出现分段错误。我不知道出了什么问题。我在谷歌上搜索了错误信息,我只是不知道它是什么意思。任何帮助都会很棒!
#include<iostream>
#include <stack>
using namespace std;
bool delimiterMatching(char *file){
stack<char> x;
int count = 0;
char ch, onTop, check;
while(ch != '/n'){
ch = file[count];
if (ch == '(' || '[' || '{')
x.push(ch);
else if (ch == ')' || ']' || '}') {
onTop == x.top();
x.pop();
if((ch==')' && onTop!='(') || (ch==']' && onTop!='[') || (ch=='}' &&
onTop!= '{'))
return false;
}
count++;
}
if (x.empty())
return true;
else
return false;
}
int main()
{
char test[50];
cout << "enter sentence: ";
cin >> test;
if (delimiterMatching(test))
cout << "success" << endl;
else
cout << "error" << endl;
return 1;
}
分段错误意味着您的程序试图访问无效的内存地址。通常情况下,这意味着您取消了对悬挂指针的引用或索引超过了数组的末尾。
在这种情况下,问题似乎出在while(ch != '/n')
行上。它有两个问题:
- 首先,
'/n'
不是有效的字符文字。您可能是指'n'
,它表示换行符 - 其次,您的字符串不会以换行符结尾,因为
cin >> test
读取一行并在末尾丢弃换行符。循环将经过数组的末尾,进入内存中它后面的任何位置,试图找到换行符,最终它将到达无法访问的位置,从而导致分段错误。您应该检查' '
,它是实际标记字符串末尾的空字符
当我将ch != '/n'
更改为ch != ' '
时,程序不会崩溃。
顺便说一句,使用std::string
比使用char[50]
更容易、更安全。
您不能使用这样的比较
if (ch == '(' || '[' || '{')
尝试
if (ch == '(' || ch== '[' || ch=='{')
相关文章:
- 如何找出GDB的SIGTRAP核心转储的根本原因
- C++映射分割错误(核心转储)
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 浮点异常(核心转储)#694457
- 分段错误(核心转储)但无法弄清楚
- 链接到libkcapi时没有核心转储
- 分段错误(核心转储) - 使用 SavedModel 的 Tensorflow C++ API 进行推断
- 在基数排序中,我得到 munmap_chunk():无效指针和中止(核心转储).为什么?
- C++指针无法在函数外部传递值和分段错误(核心转储)错误
- 合并排序:分段错误核心转储
- C++:分段错误(核心转储)
- 从 pybind11 构建导入模块时出现"分段错误(核心转储)"
- 如何使用 lldb 在曼扎罗中调试 lz4 文件格式的核心转储?
- qt C++命令行代码中的分段错误(核心转储)
- 从文件中读取的数据,但发生核心转储错误
- googletest:测试基类具有纯虚拟方法的派生类时的核心转储
- C++ atof - 分段错误(核心转储)
- Linux C 只禁止我的程序使用核心转储
- 为什么我的代码包含错误分段错误(核心转储)?