我在C语言的子集和问题上遇到了一个分段错误

我在C语言的子集和问题上遇到了一个分段错误,c,algorithm,subset-sum,C,Algorithm,Subset Sum,我需要处理一个子集和问题。它需要弄清楚数组的一个子集是否可以求和到所需的值。 样本输入 9:33441252 9=5+4 但是,我得到了一个分段错误和下面的一些警告 logParse.c: In function ‘findSubset’: logParse.c:37:4: warning: passing argument 2 of ‘subsetSum’ from incompatible pointer type [enabled by default] subsetSum(set

我需要处理一个子集和问题。它需要弄清楚数组的一个子集是否可以求和到所需的值。 样本输入
9:33441252
9=5+4

但是,我得到了一个分段错误和下面的一些警告

logParse.c: In function ‘findSubset’:
logParse.c:37:4: warning: passing argument 2 of ‘subsetSum’ from incompatible pointer type [enabled by default]
    subsetSum(set, subSet, size, 0, 0, 0, sum);
    ^
logParse.c:21:6: note: expected ‘int *’ but argument is of type ‘int **’
 void subsetSum(int set[], int subSet[], int n, int subSize, int total, int nodeCount ,int sum) {
      ^
gcc logParse.c -o logParse
logParse.c: In function ‘findSubset’:
logParse.c:37:4: warning: passing argument 2 of ‘subsetSum’ from incompatible pointer type [enabled by default]
    subsetSum(set, subSet, size, 0, 0, 0, sum);
    ^
logParse.c:21:6: note: expected ‘int *’ but argument is of type ‘int **’
 void subsetSum(int set[], int subSet[], int n, int subSize, int total, int nodeCount ,int sum) {
这是我的错误代码

        void displaySubset(int subSet[], int size) {

           int i;
           int subset[size];
           for(i = 0; i < size; i++) {
              printf("%d ",subset[i]);
              //printf(" ");
           }
           printf("\n");
        }

        void subsetSum(int set[], int subSet[], int n, int subSize, int total, int nodeCount ,int sum) {
           int i;
           if( total == sum) {
              displaySubset(subSet, subSize);     //print the subset
              subsetSum(set,subSet,n,subSize-1,total-set[nodeCount],nodeCount+1,sum);     //for other subsets
              return;
           }else {
              for(i = nodeCount; i < n; i++ ) {     //find node along breadth
                 subSet[subSize] = set[i];
                 subsetSum(set,subSet,n,subSize+1,total+set[i],i+1,sum);     //do for next node in depth
              }
           }
        }

        void findSubset(int set[], int size, int sum) {
           int subSet[size];      //create subset array to pass parameter of subsetSum
           subsetSum(set, subSet, size, 0, 0, 0, sum);
        }

        int main(int argc, char *argv[]){

                int weights[] = {10, 7, 5, 18, 12, 20, 15};
                int size = 7;
                findSubset(weights, size, 35);
                return 0;
        }

请帮助我如何修复我的代码,感谢findSubset函数中的

,当调用subsetSum时,您使用的是int*数组,而实际上它需要int数组。声明int子集[size],而不是int*子集[size]。
int子集[size];对于(i=0;i
显示随机数据。为什么要打印未初始化的数组?这是您编写的代码还是您试图调试的其他人的代码?@chux我从这里得到了它,我需要在我的项目中实现此算法,我将尝试使子进程能够处理subtasks@omermuhit您的链接有
void displaySubset(int subSet[],int size){for(int i=0;i    1173794464 32765 4197334 
    1173794464 32765 4197334 
    1173794544 32765