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