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