【发布时间】:2023-03-10 12:12:02
【问题描述】:
我刚开始学习 C++ 并得到这样的错误。它通过编译但在运行期间出现分段错误。有人可以帮我吗?我不确定问题出在哪里,因为我真的不熟悉分段错误。我确实检查了有关此主题的其他一些帖子,但没有得到它。
#include <iostream>
using namespace std;
class ThreeSum{
private :
int *numbers;
int n;
public:
ThreeSum();
ThreeSum(int numbers_in[], int n_in);
int **threeSumCombinations(){
int **SumCom;
for(int i=0; i<n; i++){
for(int j=i+1; i<n; j++){
for(int k=j+1; j<n; k++){
if(numbers[i]+numbers[j]+numbers[k]==0){
SumCom[i][0]=numbers[i];
SumCom[i][1]=numbers[j];
SumCom[i][2]=numbers[k];
}
}
}
};
return SumCom;
}
};
ThreeSum::ThreeSum(int numbers_in[], int n_in)
:numbers(numbers_in), n(n_in){}
int main(){
int arr[5] = {2,1,0,-1,-2};
ThreeSum t1(arr,5);
cout << sizeof(t1.threeSumCombinations()) << endl;//output is 8
for(int i=0; i<sizeof(t1.threeSumCombinations()); i++){
cout << t1.threeSumCombinations()[i] << endl;
}
return 0;
}
【问题讨论】:
-
首先,在创建具有动态内存的类时应仔细考虑。从
threeSumCombinations()开始,你声明int **SumCom但你在哪里为它分配内存??? -
我看到很多错误。您需要在代码中添加 cmets,以便其他人可以阅读。
-
首先,
sizeof(t1.threeSumCombinations())只是指针的大小(以字节为单位)(显然,您在 64 位系统上运行)。它与数组threeSumCombinations()可能返回的大小(以元素为单位)无关。其次,SimCom被使用但从未被初始化。 -
-1 表示“我确实查看了有关此主题的其他一些帖子,但没有得到它”。像这样的短语是“OK”的试金石。傻瓜们,为我感到难过,为我做调试,因为我不想做那么多辛苦的工作。”谷歌搜索“分段错误”得到:“大约 1,060,000 个结果”。
标签: c++ arrays pointers segmentation-fault