0

私はCプログラムを持っています。これは十分に単純ですが、ポインターをインテリジェントに使用するのはかなり苦手です。誰かがこれで私を助けることができれば、私は本当に感謝しています. それはメインの2つの機能を持っています。最初の関数は、1 ~ 10 の 10 個の整数で配列を作成します。2 番目の関数は、その配列を出力します。ありがとう、

#include<stdio.h>

//function to create array of 10 ints
int* myArray(void)
{
int array[10], i;

for(i = 0; i < 10; ++i)
{
    array[i] = i + 1;
}
return array;
}


//function to printout the array of 10 ints
void printArray(void)
{
int *array = myArray();
int i;
for(i = 0; i < 10; ++i)
{
printf("%d ", array[i]);
}
}

//my main
int main()
{
myArray();
printArray();

}

私が現在得ている出力は 1 1 2 3078316 5 6 3078824 257921824 1905931270 -2 かなりめちゃくちゃです笑。

4

1 に答える 1

5

問題は、関数からローカル変数を返すことですmyArray。宣言int array[10]するとスタックに置かarrayれ、戻ると破棄されmyArrayます。これはmyArray、無効なポインターを返していることを意味します。

関数内で配列を作成する必要がある場合は、 を使用しますmalloc。あれは:

int *array = (int *)malloc(10 * sizeof(int));

将来のある時点でfree()、配列が必要になることに注意してください。たとえば、printArray次のようになります。

int *array = myArray();
/* do some stuff with array */
free(array);
于 2012-12-10T02:05:51.613 に答える