Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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++ 返回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数组,请确保动态分配该数组,然后返回指针。代码的问题是返回指向局部变量的指针,这将导致问题

基本上,您将希望执行以下操作(骨架):


您将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;
}