为什么代码在运行时会出现分段错误?

时间:2013-10-08 19:38:47

标签: c++ string io segmentation-fault stack

通过注释堆栈语句来运行代码,它会产生正确的输出,但在声明堆栈时它会显示分段错误。请帮忙。

#include <iostream>
#include <stack>
#include <queue>

using namespace std;

int main()
{
    int t;
    char *expr;

    stack < string > inp_stack;
    // queue <int> op_queue;

    cin >> t;

    while (t--)
    {

        cin >> expr;
        cout << expr << endl;
    }

    return 0;
}

2 个答案:

答案 0 :(得分:1)

char *expr;
cin >> expr;

expr是一个未初始化的(无效)指针,使用该指针会导致未定义的行为

如果您想要从输入流中读取t个字词,请改用std::string对象:

int t = 0;
std::cin >> t;

std::string expr;
while (t > 0 && std::cin >> expr) {
    std::cout << expr << std::endl;
}

答案 1 :(得分:0)

它因为您正在访问未初始化的指针而发生段错误。 expr永远不会被初始化,因此您的程序一旦访问就会出现段错误。

您需要为expr分配内存或将其更改为固定大小的数组。