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.