我试图返回一个指向一个ints数组的指针,这些ints都是一个给定数字的除数器。当我给出10作为参数并运行我的程序时,我注意到方法dividers_of(.)给出适当的输出。但是不幸的是,第二个方法叫做number_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;
}输出:
代尔人: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
发布于 2014-07-23 11:33:27
这里的问题不是数组没有初始化,而是它是函数中的一个局部变量,一旦函数返回,就会超出作用域。
在另一个函数中拥有并使用指向局部变量的指针将导致http://en.wikipedia.org/wiki/Undefined_behavior。
基本上只有两种解决方案:
https://stackoverflow.com/questions/24909335
复制相似问题