我试图返回一个指向一组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 尼特勒:3niet-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
答案 0 :(得分:4)
这里的问题不是数组没有初始化,而是它是一个函数内部的局部变量,一旦该函数返回就超出了范围。
在另一个函数中使用和使用指向局部变量的指针会产生undefined behavior。
基本上只有两种解决方案可用:
动态分配函数中的内存,并将其返回;或
在调用函数中定义数组,并将其作为参数传递给需要它的函数。