使用 vector<> 时出现分段错误

Segmentation Fault whenever using vector<>

int main()

{

    int n;

    cin >> n;


    char* temp_char;
    vector<string> arr; 


    for (int i = 0; i < n; i++)

    {

        cin >> temp_char;

    }





    return 0;

}

嗨,每当我在这个程序中有 vector<string> arr; 时,无论我是否实际使用这个变量 arr,在第一个 forloop 中的第一个 cin 之后,我收到分段错误,不知道为什么这发生了?我在后面的编程中确实需要使用vector<string>。 我正在 Ubuntu 下使用 g++ 进行编译,非常感谢任何帮助!

我不确定你的代码,但我认为你必须使用 字符 temp_char 代替 字符* temp_char 或者至少分配一些内存给 temp_char:

#include <iostream>
#include <vector>

int main()
{  
    int n;
    std::cin >> n;

    char* temp_char = new char[100];
    std::vector<std::string> arr; 


    for (int i = 0; i < n; i++)
    {
        std::cin >> temp_char;
        arr.push_back(temp_char);
    }

    for (auto s : arr)
    std::cout << s << std::endl;

    return 0;
}
char* temp_char;
vector<string> arr; 

for (int i = 0; i < n; i++)
{
    cin >> temp_char;
}

为什么是指针?

这里发生的事情是您创建了一个指向未定义位置的 char*std::istream(其中 std::cin 是一个对象)提供了一种将输入读入 char* 的特殊方法,但只有当目标 char* 指向有效内存时才有效。

否则,行为是未定义的,这意味着任何事情都可能发生,包括崩溃。


解决方案不是使用指针,而是 std::getline:

#include <iostream>
#include <string>
#include <vector>

int main()
{
    int n;
    std::cin >> n;
    std::cin.ignore();

    std::vector<std::string> arr; 

    for (int i = 0; i < n; ++i)
    {
        std::string line;
        std::getline(std::cin, line);
        arr.push_back(line);
    }
}