2017-02-26 5 views
-3
#include <stdio.h> 

int* createReverseArray(int *array, int size) 
{ 
    int i; 
    int newArray[size]; 
    for(i=size-1; i>=0; i--) 
    { 
     newArray[i] = array[size-i-1]; 
    } 

    return newArray; 
} 

int main(void) { 

    int myArray[] = {1,2,3,5,1}; 
    int myArray2[] = {1,2,3,4,2,1}; 
    int i; 

    int size = sizeof(myArray)/sizeof(int); 
    printf("Size: %d\n", size); 
    int* newArray = createReverseArray(myArray, size); 

    for(i=0; i<size; i++) 
    { 
     printf("%d, ", newArray[i]); 
    } 

    return 0; 
} 

Cに期待される出力を与えるのではなく、私は配列へのポインタを返し、その結果を印刷しようとすると、I各アレイスポットへのポインタを印刷していると思いますか?私はあまりよく分からない。配列へのポインタを返すことは、私はcreateReverseArray関数内の配列を印刷し、正しい出力を得た

これは戻します

サイズ:5

12341002、1、-10772231820、-1077231812、1074400845、

+2

をdiynamicallyメモリを割り当てると、それへのポインタを返すことができ

はStackOverflowの上で前について尋ねてきました。関数内で割り当てられたメモリへのポインタを返すと、その関数はなくなります。 Go言語はこの作業を行い、そのメモリをヒープに移動するほどスマートですが、Cはこれを行うことができません。この配列のためのスペースを自分でmallocする必要があります。 –

+1

@RayToal:これは1000回以上しか聞かれていません...そして、はい、それは言語の基本的な概念から始まっていないことから生じる非常に基本的なエラーです。 1つは良いCの本から取得します。 – Olaf

答えて

2

newarray自動ローカル変数です。機能復帰後はもう存在しません。自動ローカル変数へのポインタを返すと、undefined behaviourが呼び出されます。この場合は何も期待できません。あなたがこれは私がかなり確信している古典的な誤りである

int *newArray = malloc(sizeof(int)*size); 
+0

createReverseArray()でmallocを呼び出してもmain関数のメモリを解放できますか? – DJSweetness

+0

@DJSweetness;はい。 'フリー'機能がどのように機能するかを読んでください。 – haccks

関連する問題