我遇到过这样一种情况,我必须将函数中的一些数学运算转换为矩阵(在编译时它的维度是未知的,所以我必须将它保存为一个指针),然后将它等同于我作为参数传递给功能。
代码每次都会抛出一个分段错误。我在这里有一个示例代码:
#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 之外的返回类型。而且我不想按行/列专业将矩阵保存在普通指针上 - 我需要知道为什么这不起作用。
仔细看看你的代码:
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)
其他可能的解决方案:
添加另一个间接级别。
void assign(int*** a)
{
// ...
*a = A;
}
int main()
{
int** ptr;
assign(&ptr);
}
Run Code Online (Sandbox Code Playgroud)从 返回assign。
int** assign()
{
// ...
return A;
}
int main()
{
int** ptr;
ptr = assign();
}
Run Code Online (Sandbox Code Playgroud)