Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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++中的数组(我用CERN的根作为C++编译器):_C++_Arrays_Function_Pointers - Fatal编程技术网

C+的行为+;在函数中创建的数组 我写了这个简单函数来学习C++中的数组(我用CERN的根作为C++编译器):

C+的行为+;在函数中创建的数组 我写了这个简单函数来学习C++中的数组(我用CERN的根作为C++编译器):,c++,arrays,function,pointers,C++,Arrays,Function,Pointers,好吧,没什么奇怪的。但是如果我在到达mat2之前对mat1进行所有操作,我会得到以下非常不同的结果: root [0] .L test.C+ root [1] root [1] int** mat1; root [2] mat1 = vec(); root [3] mat1[0][0] (int)(-460363344) root [4] root [4] int** mat2; root [5] mat2 = vec(); root [6] mat2[0][0] (int)(-1) 在本

好吧,没什么奇怪的。但是如果我在到达mat2之前对mat1进行所有操作,我会得到以下非常不同的结果:

root [0] .L test.C+
root [1] 
root [1] int** mat1;
root [2] mat1 = vec();
root [3] mat1[0][0]
(int)(-460363344)
root [4] 
root [4] int** mat2;
root [5] mat2 = vec();
root [6] mat2[0][0]
(int)(-1)

在本例中,就mat1而言,我的函数似乎不起作用。有人能帮我理解这里发生了什么吗?

我发现了以下问题:

问题1

int *pointer[m];

不是合法的C++代码。 问题2

当你执行

return pointer;
函数返回后,返回的内存指针无效

简单的解决办法是更换线路

int *pointer[m];


您正在返回一个局部变量地址(
指针
),它在调用方端引用时调用未定义的行为。即将发生的内存泄漏纯粹是额外的好处。编译此代码时是否看到任何警告?当函数退出且不再可用时,局部变量将被销毁(未定义的行为)。请尝试使用静态数组或动态分配的数组。@DrewDormann没有警告来修复它。谢谢但现在你有了一个新问题。。。删除那个记忆(双关语)。你可能应该用一个向量来代替。@Cogwheel我会的,但是向量向量在根中不起作用指针向量应该起作用<代码>&vec[0]将等同于您现在返回的int**。甚至可能是一个唯一的ptr向量,然后你甚至不需要手动管理元素的删除。谢谢,我可以这样做。出于我的目的,我只在For循环中执行int**pointer=vec(),我认为这将解决内存问题,但我真的不知道。
return pointer;
int *pointer[m];
int ** pointer =  new int*[m];