将指针分配给 C++ 中的指针

Nid*_*naa 0 c++ pointers

我遇到过这样一种情况,我必须将函数中的一些数学运算转换为矩阵(在编译时它的维度是未知的,所以我必须将它保存为一个指针),然后将它等同于我作为参数传递给功能。

代码每次都会抛出一个分段错误。我在这里有一个示例代码:

#include <iostream>
using namespace std;
void assign(int **a)
{
  int **A = new int* [3];
  int i, j;

  for(i = 0; i < 3; i++)
    A[i] = new int[3];

  for(i = 0; i < 3; i++)
    for(j = 0; j < 3; j++)
      A[i][j] = 100;

  a = A; /* equating the pointers */
}

int main()
{
  int **ptr;
  assign(ptr); /* Passing my pointer into the function */
  cout << ptr[0][0] << endl;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

代码是用 C++ 编写的,我不能让函数具有除 void 之外的返回类型。而且我不想按行/列专业将矩阵保存在普通指针上 - 我需要知道为什么这不起作用。

Vit*_*meo 5

仔细看看你的代码:

void assign(int** a)
{
    // ...
}

int main()
{
    int** ptr;
    assign(ptr);
}
Run Code Online (Sandbox Code Playgroud)

a通过值传递- 调用后assign(ptr),您不会ptr在函数体内修改自身,而只是ptr.

ptr供参考,而不是:

void assign(int**& a)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

其他可能的解决方案:

  1. 添加另一个间接级别。

    void assign(int*** a)
    {
        // ...
        *a = A;
    }
    
    int main()
    {
        int** ptr;
        assign(&ptr);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 从 返回assign

    int** assign()
    {
        // ...
        return A;
    }
    
    int main()
    {
        int** ptr;
        ptr = assign();
    }
    
    Run Code Online (Sandbox Code Playgroud)