尝试获取值不在内存中导致的分段错误

时间:2015-09-07 02:28:34

标签: c++ pointers segmentation-fault

所以我理解我的分段错误是尝试访问内存中找不到的地址的结果。但是,我不确定如何修复错误,我需要传递指针,以便能够在分配函数中分配内存。

int main () {

  int ****s, ****t, ****u, ****v;

  int numRows, numColumns;

  allocateMemory(numRows, numColumns, s, t, u, v);
}

void allocateMemory(int **** &s, int **** &t, int **** &u, int **** &v) {


  s = new int***;
  t = new int***;
  u = new int***;
  v = new int***;

  ****s = ****t; 
  ****t = ****s;
  ****u = ****v; 
  ****v = ****u;

  *s = new int**;
  *t = new int**;
  *u = new int**;
  *v = new int**;

  ***s = ***t;
  ***t = ***s;
  ***u = ***v; 
  ***v = ***u;

  **s = new int*;
  **t = new int*;
  **u = new int*;
  **v = new int*;

  **s = **t; 
  **t = **s;
  **u = **v; 
  **v = **u;

  **s = new int*[numRows]; 
  for(int xCount = 0; xCount < numRows; ++xCount){                                     

    s[xCount] = new int[numColumns];
  }
}

1 个答案:

答案 0 :(得分:1)

第一个问题:

void allocateMemory(int **** &s, int **** &t, int **** &u, int **** &v) {
  ...

  s[xCount] = new int[numColumns];

这不会编译;这些类型在此作业中不匹配。左侧是int***,位于右侧int*。我可以猜到你的意思,但是 -

第二个问题:

void allocateMemory(int **** &s, int **** &t, int **** &u, int **** &v) {
  s = new int***;
  t = new int***;
  u = new int***;
  v = new int***;

  ****s = ****t; 
  ...

您刚刚从这些指针中分配了内存一层深度。现在,您将四个级别取消引用它们。您正在关注实际上存在的指针。这是未定义的行为。

潜在问题:

你正在尝试的东西远远超出你对指针和数组的理解。您必须从更简单的开始。尝试int及其中的一些指针,然后是int[]int**,依此类推。不要尝试新的水平,直到前一个完美运作; 永远不会添加到无效的代码中。

在此过程中,您将看到封装中某些结构的价值,例如结构。