gpt4 book ai didi

c++ - 在尝试使用递归查找集合的子集总数时,出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 12:29:10 24 4
gpt4 key购买 nike

//递归程序寻找一个集合的所有子集

#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;
}

程序编译成功,但在执行时显示段错误。上述程序的预期输出应该是12312131个232个空的共有 8 个子集为 2^3=8。

最佳答案

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

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

+--------+--------+--------+| arr[0] | arr[1] | arr[2] |+--------+--------+--------++-----+     +--------+--------+--------+| tmp | --> | tmp[0] | tmp[1] | tmp[2] |+-----+     +--------+--------+--------+

The two arrays are two separate and distinct entities without relationship.


And as mentioned

tmp[i] = arr[i];

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

int temporary_value_copy = arr[i];
tmp[i] = temporary_value_copy;

有了上面的两行代码,您还会声称 tmp[i]“引用”或“指向”arr[i] 吗?我希望不会。


此外(如前所述),由于tmp 是一个指针

std::cout << tmp;

将打印指针本身,而不是它可能指向的可能数据。要打印 tmp 指向的数组的所有元素,您需要一个循环:

for (size_t i = 0; i < 3; ++i)
std::cout << tmp[i];

关于c++ - 在尝试使用递归查找集合的子集总数时,出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59355373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com