gpt4 book ai didi

c - 从函数返回错误的数组值

转载 作者:行者123 更新时间:2023-12-02 08:12:15 25 4
gpt4 key购买 nike

我正在制作这个程序,其中我的主函数调用一个函数,该函数在计算后返回一个数组。我已经检查过计算就在本地函数内部。但是,当我将该数组返回给“main”函数时,我只能打印一次正确的值,而其他所有时间都打印错误的值。

#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
#include <stdbool.h>
int* getJoinedPipes(int input1_size, int* input1,int* output_size){
int i,j,temp;
int op1[input1_size-1];
*output_size = input1_size - 1;
for(i=0; i<input1_size; i++){
for(j=i+1; j<input1_size; j++){
if(input1[i] > input1[j]){
temp = input1[i];
input1[i] = input1[j];
input1[j] = temp;
}
}
}

op1[0]=input1[0] + input1[1];
for(i=1;i<input1_size-1;i++){
op1[i] = op1[i-1]+input1[i+1];
}
//printf("%d\n",op1[2]);

return op1;
}

int main() {
int output_size;
int* output;

int ip1_size = 0;
int ip1_i;
scanf("%d\n", &ip1_size);
int ip1[ip1_size];
for(ip1_i = 0; ip1_i < ip1_size; ip1_i++) {
int ip1_item;
scanf("%d", &ip1_item);

ip1[ip1_i] = ip1_item;
}
output = getJoinedPipes(ip1_size,ip1,&output_size);
printf("a==%d\n",output[0]);
printf("a==%d\n",output[0]);
printf("a==%d\n",output[0]);
int output_i;
for(output_i=0; output_i < output_size; output_i++) {
printf("%d\n", output[output_i]);
}

return 0;
}

输出应该是

5
9
15

但在控制台中,它显示以下内容(试运行后)。 See the image

a==5    
a==1943372821
a==1943372821
1943372821
17
6356632

您可以看到它第一次给出正确的值 (5),然后对于相同的打印它给出垃圾值。

最佳答案

op1 是一个自动数组。您不能退回它并在其范围之外使用它。

op1 只存在于 getJoinedPipes 中,如果返回它,结果是 Undefined Behaviour

要修复它,您可以:

  • op1作为参数传递给getJoinedPiped
  • 在堆上动态分配op1。你你这样做,你可以安全地返回 op1 但你必须记住在你不需要它时 free 它。

关于c - 从函数返回错误的数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45617539/

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