gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:27:34 25 4
gpt4 key购买 nike

我正在尝试返回一个指向整数数组的指针,这些数组都是给定数字的除数。当我给出 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;
}

输出:

删除者:2nietdeler : 3

nietdeler: 4

删除:5

nietdeler: 6

nietdeler: 7

nietdeler: 8

nietdeler: 9

元素 1

元素 2009

元素 2008

元素 0

元素 0

元素1638

元素 23

元素 1

元素 2293

元素 0

最佳答案

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

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


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

  1. 在函数中动态分配内存,并返回;或者

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

关于c - 我的 int 数组怎么可能没有正确初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24909335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com