我遇到过这样一种情况,我必须在一个函数中对矩阵进行一些数学运算(它的维度在编译时是未知的,所以我必须将它保存为一个指针)然后将它等同于我传递的一个指针函数的参数。
代码每次都会抛出一个段错误。我这里有一个示例代码:
#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)
{
// ...
}
其他可能的解决方案:
添加另一个间接级别。
void assign(int*** a) { // ... *a = A; } int main() { int** ptr; assign(&ptr); }
从
赋值
返回。int** assign() { // ... return A; } int main() { int** ptr; ptr = assign(); }
关于c++ - 将指针分配给 C++ 中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34965753/