每当使用向量<>时出现分段错误

时间:2015-09-19 09:01:36

标签: c++ vector segmentation-fault iostream

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 ++编译,任何帮助都会非常感激!

2 个答案:

答案 0 :(得分:1)

import Foundation
import SpriteKit

class LevelOne : SKScene{

    let background = SKSpriteNode(imageNamed: "bgsmaller")
    let player = SKSpriteNode()

    required init?(coder aDecoder:NSCoder) {
        super.init(coder: aDecoder)
    }

    override init(size: CGSize) {
        super.init(size: size)

        // add background

        background.anchorPoint = CGPoint(x: 0.5, y: 0.0)
        background.position = CGPoint(x: size.width / 2, y: 0.0)
        addChild(background)



    }


}

为什么指针?

这里发生的是您创建一个指向未定义位置的char* temp_char; vector<string> arr; for (int i = 0; i < n; i++) { cin >> temp_char; } char*(其中std::istream是一个对象)提供了一种特殊的方式来读取std::cin的输入,但只有当目标char*指向有效内存时才会有效。< / p>

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

解决方案不是使用指针,而是char*

std::getline

答案 1 :(得分:-3)

我不确定你的代码,但我认为你必须使用     char temp_char 绝对的     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;
}