C++ 当尝试使用递归查找集合子集的总数时,我遇到了分段错误

C++ 当尝试使用递归查找集合子集的总数时,我遇到了分段错误,c++,recursion,set,C++,Recursion,Set,//求集合的所有子集的递归程序 #include<iostream> using namespace std; const int n =3; int arr[n]={1,2,3}; void pass(int *tmp,int tmpArrayIndex, int OriginalArrayIndex) /* * int* tmp is temporary array to store * int tmpArrayIndex == size of array

//求集合的所有子集的递归程序

#include<iostream>

using namespace std;

const int n =3;
int arr[n]={1,2,3};

void pass(int *tmp,int tmpArrayIndex, int OriginalArrayIndex)    
/*
*   int* tmp is temporary array to store 
*   int tmpArrayIndex == size of array is diiferent at different level, indicates the position to insert element
*   int OriginalArrayIndex == positon of element in original array for which decision is to made ot select or reject a element
*/
{
    if(OriginalArrayIndex == n)
    {
        cout<<tmp<<endl;
        return;
    }
    tmp[tmpArrayIndex] = arr[OriginalArrayIndex];
    pass(tmp,tmpArrayIndex+1,OriginalArrayIndex+1);
    pass(tmp,tmpArrayIndex,OriginalArrayIndex+1);
}

int main(void)
{
    int *tmp;
    pass(tmp,0,0);
    return 0;
}
程序编译成功,但执行时显示分段错误。 上述程序的预期输出应为 123 12 13 1. 23 2. 空的
总共8个子集,为2^3=8。

数组tmp没有引用或指针。变量tmp是一个指针true,但如果执行tmp=new int[3],则tmp将指向与arr无关的新数组的第一个元素。tmp[i]=arr[i]复制这些元素,这两个数组仍然是不同和独立的,tmp指向的数组中没有任何元素将引用或指向arr的任何元素

从图形上看,两个数组和指针在tmp=new int[3]之后看起来像这样:

将值从arr[i]复制到tmp[i]。这类似于

int temporary_value_copy = arr[i];
tmp[i] = temporary_value_copy;
在上面的两行中,您是否仍然认为tmp[i]引用或指向arr[i]?我希望不是

此外,正如前面提到的,由于tmp是一个指针

std::cout << tmp;

数组tmp没有引用或指针。变量tmp是一个指针true,但如果执行tmp=new int[3],则tmp将指向与arr无关的新数组的第一个元素。tmp[i]=arr[i]复制这些元素,这两个数组仍然是不同和独立的,tmp指向的数组中没有任何元素将引用或指向arr的任何元素

从图形上看,两个数组和指针在tmp=new int[3]之后看起来像这样:

将值从arr[i]复制到tmp[i]。这类似于

int temporary_value_copy = arr[i];
tmp[i] = temporary_value_copy;
在上面的两行中,您是否仍然认为tmp[i]引用或指向arr[i]?我希望不是

此外,正如前面提到的,由于tmp是一个指针

std::cout << tmp;
根据程序员的建议修改代码

这是预期的输出

PS: a newline after last output entry i.e 3, indicates empty subset. 
根据程序员的建议修改代码

这是预期的输出

PS: a newline after last output entry i.e 3, indicates empty subset. 

tmp未初始化。您应该了解如何使用调试器。未初始化的本地变量实际上是未初始化的,并且将具有不确定的值。以任何方式使用此值,如取消对未初始化指针的引用,这就是您正在使用的,例如tmp[tmpArrayIndex]将导致@Someprogrammerdude在进行更正后,从int*tmp;to int*tmp=新的int[n];加上int-tmpArrayIndex=0;int OriginalArrayIndex=0;主要的方法,这消除了错误的分割错误,但我仍然没有得到所需的答案。更正0x7fffe83dee70 0x7fffe83dee70 0x7fffe83dee70 0x7fffe83dee70 0x7fffe83dee70 0x7fffe83dee70 0x7fffe83dee70 0x7fffe83dee70 0x7fffe83dee70后的输出预期输出是什么?您正在打印指针tmp,而不是打印所指向的数据。请在阅读有关的内容后编辑您的问题以进行改进,以及。为什么您需要一个单独的数组?您已经定义了一个全局的,所以您可以只使用passarr,0,0;请注意,在需要指针的上下文中,数组会自动衰减为指针。tmp未初始化。您应该了解如何使用调试器。未初始化的本地变量实际上是未初始化的,并且将具有不确定的值。以任何方式使用此值,如取消对未初始化指针的引用,这就是您正在使用的,例如tmp[tmpArrayIndex]将导致@Someprogrammerdude在进行更正后,从int*tmp;to int*tmp=新的int[n];加上int-tmpArrayIndex=0;int OriginalArrayIndex=0;主要的方法,这消除了错误的分割错误,但我仍然没有得到所需的答案。更正0x7fffe83dee70 0x7fffe83dee70 0x7fffe83dee70 0x7fffe83dee70 0x7fffe83dee70 0x7fffe83dee70 0x7fffe83dee70 0x7fffe83dee70 0x7fffe83dee70后的输出预期输出是什么?您正在打印指针tmp,而不是打印所指向的数据。请在阅读有关的内容后编辑您的问题以进行改进,以及。为什么您需要一个单独的数组?您已经定义了一个全局的,所以您可以只使用passarr,0,0;请注意,在需要指针的上下文中,数组会自动衰减为指针。
1 2 3 
1 2 
1 3 
1 
2 3 
2 
3
PS: a newline after last output entry i.e 3, indicates empty subset.