【问题标题】:Segmentation Fault in array of array数组数组中的分段错误
【发布时间】: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


【解决方案1】:

I 分段错误是当您读取内存时发生的错误,您不认为这是错误的。这在使用指针和数组时最常发生。您的问题很可能与您的阵列问题有关。我不能告诉你是,但请尽量确保你仔细检查。

看着它,问题之一似乎是第三个'for循环'。您永远不会检查 k 是否达到限制。因此,它一直在继续。这是一个无限循环。

【讨论】:

    猜你喜欢
    • 2022-12-03
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    相关资源
    最近更新 更多