0

配列を返して別の関数に渡そうとしています:

    int* getBasicArray(){
        int amountArray[5];
        amountArray[0]=1;

        return amountArray;
    }
    void printArray(int (*amountArray)){
        cout <<amountArray[0]<<endl;
    }
int main() 
{
    int* test=getBasicArray();
    cout <<test[0]<<endl; //Prints 1
    printArray(test); //Prints 19354128

どういうわけか、単純な印刷関数に渡そうとすると、配列がめちゃくちゃになります。私は何を間違っていますか?

4

3 に答える 3

0

getBasicArrayポインタが返るとガベージを指します。本当に配列を割り当てたい場合は、 を使用して行う必要がありますoperator new[]

int* getBasicArray() {
    return new int[5];
}

自動ストレージを使用しなくなったことに注意してください。使用したメモリを解放したい場合は、delete を呼び出す必要があります。

最も簡単な解決策は、生の配列を使用しないことです。それらには、配列内の要素の数を取得できない、簡単に減衰するなどの固有の問題があります。

代替手段はstd::vectorstd::arrayです。コンパイル時に配列のサイズがわかっている場合は後者を使用し、実行時にサイズがわかっている場合は前者を使用します。

この場合、コンパイル時にサイズがわかっているので、std::array を使用します。

std::array<int, 5> get_basic_array()
{
    std::array<int, 5> arr;
    arr[0] = 1;

    return arr;
}
于 2013-10-12T08:22:24.527 に答える