C++ 返回c+中的二维数组+;使用打字 int**function() { int M[2][2]={{1,2},{3,4}; return(int**)M;//这有效吗? } 使另一个无效fn() { int**p=新的int*[2]; 对于(int i=0;i
要返回2D数组,请确保动态分配该数组,然后返回指针。代码中的问题是返回指向局部变量的指针,这将导致问题 基本上,您将希望执行以下操作(骨架):C++ 返回c+中的二维数组+;使用打字 int**function() { int M[2][2]={{1,2},{3,4}; return(int**)M;//这有效吗? } 使另一个无效fn() { int**p=新的int*[2]; 对于(int i=0;i,c++,arrays,pointers,multidimensional-array,C++,Arrays,Pointers,Multidimensional Array,要返回2D数组,请确保动态分配该数组,然后返回指针。代码中的问题是返回指向局部变量的指针,这将导致问题 基本上,您将希望执行以下操作(骨架): 若要返回2D数组,请确保动态分配该数组,然后返回指针。代码的问题是返回指向局部变量的指针,这将导致问题 基本上,您将希望执行以下操作(骨架): 您将2D数组表示为指向int的指针。这不是一个好主意。更好的办法是使用std::vector。更好的办法是使用专用类。但关键是,一旦您去掉指针,就可以毫无问题地返回值: int** function() {
若要返回2D数组,请确保动态分配该数组,然后返回指针。代码的问题是返回指向局部变量的指针,这将导致问题 基本上,您将希望执行以下操作(骨架):
您将2D数组表示为指向int的指针。这不是一个好主意。更好的办法是使用
std::vector
。更好的办法是使用专用类。但关键是,一旦您去掉指针,就可以毫无问题地返回值:
int** function()
{
int** M;
// Allocate M here
return M;
}
这对于适当定义矩阵_2d
(见上文)非常有效
,并访问无效内存。特别是,您正在主函数中分配内存,但随后通过使用
function()的结果重新分配内存,从而丢弃指向该内存的指针
:在函数中
您没有使用以前分配的内存,而是使用堆栈分配的内存并返回指向该内存的指针。函数退出后,堆栈分配的内存将消失。您将2D数组表示为指向int的指针。这是一个坏主意。更好的方法是使用std::vector
。更好的方法是使用专用类。但关键是,一旦去掉指针,就可以毫无问题地返回值:
int** function()
{
int** M;
// Allocate M here
return M;
}
这对于适当定义矩阵_2d
(见上文)非常有效
,并访问无效内存。特别是,您正在主函数中分配内存,但随后通过使用
function()的结果重新分配内存,从而丢弃指向该内存的指针
:在函数中
您没有使用以前分配的内存,而是使用堆栈分配的内存并返回指向该内存的指针。一旦函数退出,堆栈分配的内存就消失了。因此,基本上我返回的是指向不再存在的变量的指针,对吗?+1,而且,这只是问题的一半m、 另一半是声明为intm[2][2]的二维数组
在结构上与声明为int**
的二维数组不同。前者本质上是指向四个int
s集群的指针,而后者是指向int
s集群的指针。因此,没有合理的方法从一个到另一个进行转换。因此,基本上我返回指向不再存在的变量的指针,对吗?+1,但这只是问题的一半。另一半是声明为int M[2][2]的二维数组
在结构上与声明为int**
的二维数组不同。前者本质上是指向四个int
s集群的指针,而后者是指向int
s集群的指针。因此,没有合理的方法从一个集群转换到另一个集群。
matrix_2d function() {
matrix_2d M = {{1, 2}, {3, 4}};
return M;
}