私のmain関数が計算後に配列を返す関数を呼び出すこのプログラムを作っています。計算がローカル関数内にあることを確認しました。しかし、私はその配列を 'main'関数に返すと、正しい値を1回だけ印刷することができ、それ以外のときは間違った値を出力します。関数から返された配列の値が正しくありません
#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
でなければなりません。しかし、コンソールでは、(ドライラン後)以下を示しています。
a==5
a==1943372821
a==1943372821
1943372821
17
6356632
あなたは、初めてその(5)は正しい値を与え、後でそのゴミ値を与える同じ印刷のためのを見ることができます。
可能な重複https://stackoverflow.com/questions/6441218/can-a-local-変数 - メモリのアクセス対象外 - 範囲外)および他の同様の質問 –
コンソール値で回答を編集 – Swarnveer
テキストを投稿できるときに、テキストの写真を投稿しないでください。 –