C ++中的分段错误将项目添加到向量
Segmentation fault in C++ adding item to a vector
最近我决定学习C++,在做一个更大的项目时,我尝试使用'vectors'。但是每次我尝试向它传递一个值时,它都会以分段错误退出。
这是我的终端输出:
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> test;
cout << "hello world" << endl;
test[0] = 0;
return 0;
}
me@my-MacBook-Pro Desktop % g++ test.cpp -o o && ./o
hello world
zsh: segmentation fault ./o
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> test;
cout << "hello world" << endl;
//test[0] = 0;
return 0;
}
me@my-MacBook-Pro Desktop % g++ test.cpp -o o && ./o
hello world
me@my-MacBook-Pro Desktop %
段错误是因为越界访问。
您需要在 ctor
中设置大小
vector<int> test(1);
或push_back:
vector<int> test;
test.push_back(0);
调整大小 vector<int> test = {0,1,2,3,4};
或 vector<int> test(5)
但在这种情况下您可能想使用 push_back
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> test;
cout << "hello world" << endl;
test.push_back(0);
cout << test[0];
return 0;
}
基本上是在末尾加一个项目。
也可以使用键为整数的映射,如果你希望能够只 [] 它或保留空格(据我所见,这就是你想要做的)
#include <iostream>
#include <unordered_map>
using namespace std;
int main(){
unordered_map<int, int> test;
cout << "hello world" << endl;
test[0] = 0;
cout << test[0];
return 0;
}
最近我决定学习C++,在做一个更大的项目时,我尝试使用'vectors'。但是每次我尝试向它传递一个值时,它都会以分段错误退出。
这是我的终端输出:
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> test;
cout << "hello world" << endl;
test[0] = 0;
return 0;
}
me@my-MacBook-Pro Desktop % g++ test.cpp -o o && ./o
hello world
zsh: segmentation fault ./o
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> test;
cout << "hello world" << endl;
//test[0] = 0;
return 0;
}
me@my-MacBook-Pro Desktop % g++ test.cpp -o o && ./o
hello world
me@my-MacBook-Pro Desktop %
段错误是因为越界访问。 您需要在 ctor
中设置大小vector<int> test(1);
或push_back:
vector<int> test;
test.push_back(0);
调整大小 vector<int> test = {0,1,2,3,4};
或 vector<int> test(5)
但在这种情况下您可能想使用 push_back
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> test;
cout << "hello world" << endl;
test.push_back(0);
cout << test[0];
return 0;
}
基本上是在末尾加一个项目。
也可以使用键为整数的映射,如果你希望能够只 [] 它或保留空格(据我所见,这就是你想要做的)
#include <iostream>
#include <unordered_map>
using namespace std;
int main(){
unordered_map<int, int> test;
cout << "hello world" << endl;
test[0] = 0;
cout << test[0];
return 0;
}