Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.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++ - Fatal编程技术网

C++ 链表递归与数组

C++ 链表递归与数组,c++,C++,这是一个打印滑动列表反转的函数。我正在数组中保存反转的值。但当我离开递归函数的作用域if时,数组值就变成了垃圾。但是当我在中打印它们的时候,如果那么这些就可以了。告诉我这是为什么??谢谢 void send_reverse(struct node* right,struct node* send){ int arr[size],i=0; if(right!=NULL){ send_reverse(right->link,send);

这是一个打印滑动列表反转的函数。我正在数组中保存反转的值。但当我离开递归函数的作用域
if
时,数组值就变成了垃圾。但是当我在
中打印它们的时候,如果
那么这些就可以了。告诉我这是为什么??谢谢

   void send_reverse(struct node* right,struct node* send){
       int arr[size],i=0;
       if(right!=NULL){
           send_reverse(right->link,send);
           cout<<"("<<right->num<<") ";
           arr[i]=right->num;
           cout<<arr[i];
           i++;

         }
       cout<<"YES \n";
       for(i=0;i<size;i++);
          cout<<"-"<<arr[i];
   }//endf_  
void send\u reverse(结构节点*右侧,结构节点*发送){
int arr[size],i=0;
if(右!=NULL){
发送\反向(右->链接,发送);

cout您的数组是在函数范围内定义的,并且在离开它之前是有效的。尝试在外部使用它是未定义的行为。即使使用递归-每个函数都有一个本地版本的
arr
(存储在堆栈上的不同位置),任何级别都不能访问另一个


顺便说一句,请注意for循环没有做任何事情(该行有一个

在递归的每一步都初始化并分配
arr
数组。不过,在函数内部,只有元素
0
被初始化,因此导致将数组的其余部分打印到UB(未定义的行为)。

每次执行此行时:

   int arr[size],i=0;
您创建了一个名为“arr”的新数组。您将值复制到这个新数组中,而不是原始数组,这就是为什么它在if语句中工作,但在到达显示整个列表的函数底部的代码时开始失败的原因

解决方案是将“arr”传递到函数中,这样函数的每个递归操作都在同一个数组上,而不是创建一个新数组