如何修复 C++ 中的分段错误(核心转储)?
How to fix the Segmentation fault (core dumped) in C++?
我正在编写一个程序,将 2 个向量组合起来并对它们进行排序,然后打印该向量,但我没有使用第三个向量。相反,我将一个向量与另一个向量组合,然后对组合向量进行排序。但是我收到一个名为“分段错误”的错误。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main() {
// your code goes here
ios_base::sync_with_stdio(0);
cin.tie(0);
int m,n;
cin >> m >> n;
vector<int> nums1, nums2;
for(int i=0; i<m; i++) cin >> nums1[i];
for(int i=0; i<n; i++) cin >> nums2[i];
for(int i=0; i<n; i++){ // nums2
nums1.push_back(nums2[i]); // I am adding all the elements present in nums2 into nums1
}
sort(nums1.begin(), nums1.end());
for(int i=0; i<(m+n); i++) cout << nums1[i] << " ";
return 0;
}
我得到的错误:运行: line 1: 3 Segmentation fault (core dumped) LD_LIBRARY_PATH=/usr/local/gcc-8.3.0/lib64 ./a.out
请告诉我如何修复此错误以及将来如何避免它。
这里:
vector<int> nums1, nums2;
for(int i=0; i<m; i++) cin >> nums1[i]; // this causes undefined behavior
for(int i=0; i<n; i++) cin >> nums2[i]; // also this one
您的向量没有缓冲区来存储数据,因此您需要在使用之前执行此操作 operator[]
:
vector<int> nums1(m), nums2(n);
nums1.push_back(2); // will add 2 to the back of nums1 so size will become m + 1
nums2.push_back(6); // will add 6 to the back of nums2 so size will become n + 1
// you can do as many push_backs as you want until
// your computer runs out of memory
现在两者都将分别使用 m
和 n
个元素进行初始化。
如果您使用 at
函数而不是 []
,程序将抛出 std::out_of_range
异常,您会突然注意到您正试图越界。但是当然 at
是以性能为代价的。
我正在编写一个程序,将 2 个向量组合起来并对它们进行排序,然后打印该向量,但我没有使用第三个向量。相反,我将一个向量与另一个向量组合,然后对组合向量进行排序。但是我收到一个名为“分段错误”的错误。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main() {
// your code goes here
ios_base::sync_with_stdio(0);
cin.tie(0);
int m,n;
cin >> m >> n;
vector<int> nums1, nums2;
for(int i=0; i<m; i++) cin >> nums1[i];
for(int i=0; i<n; i++) cin >> nums2[i];
for(int i=0; i<n; i++){ // nums2
nums1.push_back(nums2[i]); // I am adding all the elements present in nums2 into nums1
}
sort(nums1.begin(), nums1.end());
for(int i=0; i<(m+n); i++) cout << nums1[i] << " ";
return 0;
}
我得到的错误:运行: line 1: 3 Segmentation fault (core dumped) LD_LIBRARY_PATH=/usr/local/gcc-8.3.0/lib64 ./a.out
请告诉我如何修复此错误以及将来如何避免它。
这里:
vector<int> nums1, nums2;
for(int i=0; i<m; i++) cin >> nums1[i]; // this causes undefined behavior
for(int i=0; i<n; i++) cin >> nums2[i]; // also this one
您的向量没有缓冲区来存储数据,因此您需要在使用之前执行此操作 operator[]
:
vector<int> nums1(m), nums2(n);
nums1.push_back(2); // will add 2 to the back of nums1 so size will become m + 1
nums2.push_back(6); // will add 6 to the back of nums2 so size will become n + 1
// you can do as many push_backs as you want until
// your computer runs out of memory
现在两者都将分别使用 m
和 n
个元素进行初始化。
如果您使用 at
函数而不是 []
,程序将抛出 std::out_of_range
异常,您会突然注意到您正试图越界。但是当然 at
是以性能为代价的。