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

标签 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;
}

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

最佳答案

仔细查看您的代码:

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

int main()
{
    int** ptr;
    assign(ptr);
}

您正在按值传递 a - 在调用 assign(ptr) 之后,您不会在函数体内修改 ptr 本身,但只是 ptr 的拷贝。

改为引用 ptr:

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

其他可能的解决方案:

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

    void assign(int*** a)
    {
        // ...
        *a = A;
    }
    
    int main()
    {
        int** ptr;
        assign(&ptr);
    }
    
  2. 赋值返回。

    int** assign()
    {
        // ...
        return A;
    }
    
    int main()
    {
        int** ptr;
        ptr = assign();
    }
    

关于c++ - 将指针分配给 C++ 中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34965753/

相关文章:

c++ - 如何删除 vector 的多个添加指针?

objective-c - 分配对象指针

C++ snprintf "cannot pass objects of non-POD type"

c++ - 在std::vector上扩展迭代器的成员选择操作符 `->`的实现是否正确?

c++ - 仅当存在数据竞争与锁定时才使用 OpenMP 临界区?

c++ - 如何在 C++ 中模板化接受模板化参数并在其上应用模板化函数的函数?

c - 释放结构体双指针的正确方法

ios - Objective-c 将一个变量设置为另一个变量的值,保持它们独立

c++ - 开罗:重新填充对象(圆圈)并将其删除

c++ - 如果我有两个具有完全相同成员但名称不同的结构/类,是否有任何简单的方法可以将一个转换为另一个?