C 我的int数组怎么可能是';未正确初始化

C 我的int数组怎么可能是';未正确初始化,c,C,我试图返回一个指向整数数组的指针,这些整数都是给定数字的除数。 当我将10作为参数并运行我的程序时,我注意到(…)的方法dividers_给出了正确的输出。 但不幸的是,第二种称为数字除数(…)的方法没有。 似乎阵列中的某些位置未设置为0或输出所示的除法器 例如,“元素2009”。 我做错了什么 #include <stdio.h> int* dividers_of(int number){ int dividers [number]; dividers[0]=

我试图返回一个指向整数数组的指针,这些整数都是给定数字的除数。 当我将10作为参数并运行我的程序时,我注意到(…)的方法dividers_给出了正确的输出。 但不幸的是,第二种称为数字除数(…)的方法没有。 似乎阵列中的某些位置未设置为0或输出所示的除法器 例如,“元素2009”。 我做错了什么

#include <stdio.h>

int* dividers_of(int number){
     int dividers [number];
     dividers[0]=1;
     int *ptr=dividers;
     int i;
     for(i=2;i<number;i++){
           if(number%i==0){
                  dividers[i]=i;
                  printf("deler : %i\n",dividers[i]);
           } else{
                  dividers[i]=0;
                  printf("niet- deler : %i\n",i);
           }
     }
     return ptr;
}

int number_dividers(int* ptr,int length){
    int * runner = ptr;
    int number_dividers ;
    while(runner!=ptr+length){
                    printf("element %i\n",*runner);
                        if(*runner!=0){
                                      number_dividers++;
                        }
                 runner++;
                 }
    return number_dividers;
}
#包括
整数*除数(整数){
整数除数[数字];
除数[0]=1;
int*ptr=除法器;
int i;

对于(i=2;i这里的问题不是数组没有初始化,而是它是函数中的一个局部变量,一旦函数返回,它就会超出范围

在另一个函数中拥有并使用指向局部变量的指针会导致错误


基本上只有两种解决方案:

  • 动态分配函数中的内存,并将其返回;或

  • 在调用函数中定义数组,并将其作为参数传递给需要它的函数


  • 这里的问题不是数组没有初始化,而是它是函数中的一个局部变量,一旦该函数返回,它就会超出范围

    在另一个函数中拥有并使用指向局部变量的指针会导致错误


    基本上只有两种解决方案:

  • 动态分配函数中的内存,并将其返回;或

  • 在调用函数中定义数组,并将其作为参数传递给需要它的函数


  • 但是,如果我将该方法返回的ptr分配给另一个ptr会怎么样?如果我将新指针分配给第二个方法,它还会显示未定义的行为吗?@BURNS如果使
    ptr
    指向本地数组并返回它,则指向的内存
    ptr
    仍将超出范围。如果动态分配内存局部变量是否将继续存在?@BURNS如果您使用动态分配,例如
    malloc
    ,则该内存将分配给整个过程,您可以随意传递指针。内存将一直有效,直到您
    释放它。啊,我现在明白了。Thx:)但是,如果我将该方法返回的ptr分配给另一个ptr会怎么样?如果我将新指针分配给第二个方法,它还会显示未定义的行为吗?@BURNS如果使
    ptr
    指向本地数组并返回它,则指向的内存
    ptr
    仍将超出范围。如果动态分配内存局部变量是否会继续存在?@BURNS如果您使用动态分配(例如
    malloc
    ),该内存将分配给整个过程,您可以随意传递指针。内存将一直有效,直到您
    释放它。啊,我现在明白了。Thx:)BTW
    整数除法器;
    未初始化。顺便说一句,
    整数除数;
    未初始化。