怎么可能我的int数组没有正确初始化

时间:2014-07-23 11:31:35

标签: c

我试图返回一个指向一组int的指针,这些int都是给定数字的分隔符。 当我将10作为参数并运行我的程序时,我注意到方法dividers_of(...)给出了正确的输出。 但遗憾的是,名为number_dividers(...)的第二种方法却没有。 看起来好像数组中的某些位置未设置为0或输出所示的分隔符 例如'element 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;
}

输出:

是的:2 尼特勒:3

niet-deler:4

deler:5

niet-deler:6

niet-deler:7

niet-deler:8

niet-deler:9

元素1

元素2009

元素2008

元素0

元素0

元素1638

元素23

元素1

元素2293

元素0

1 个答案:

答案 0 :(得分:4)

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

在另一个函数中使用和使用指向局部变量的指针会产生undefined behavior


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

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

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