2017-10-02 60 views
1

私は、次の「エラー:テンポラリアレイのアドレスを取得する」とはどういう意味ですか?

// Example program 
#include <iostream> 
#include <string> 

int* x; 

int main() 
{ 
    x = (int[5]) { 16, 2, 77, 40, 12071 }; 

    std::cout << x; 
} 

を実行しようとすると、私は次のメッセージerror: taking address of temporary array

これは何を意味するのか?取得

+1

正確に言うとおりです。 '(int [5]){16,2,77,40,12071}'は何と思いますか? (C++の標準コンプライアンスは別として)。 – StoryTeller

答えて

6

(int[5]) { 16, 2, 77, 40, 12071 }は、匿名のテンポラリです。割り当てが完了すると、範囲外になります。

これで、ダングリングポインタが残っています。 xがグローバル名前空間にあることに違いはありません。

代わりにstd::vectorを使用してください。イニシャライザリスト構築を利用する。

+0

範囲外とはどういう意味ですか?私はC++にガベージコレクタがないと思った? – AlanSTACK

+3

Cに慣れ親しんでいる人には価値があると言えるでしょう.C++のインクルードを削除してmainのプロトタイプを修正してください。これは複合リテラルになります。そしてそれは囲みスコープの存続期間中存続します。 2つのいとこの言語のもう一つの楽しみの違い。 – StoryTeller

+3

@Alan - スコープを設定するためにガベージコレクタは必要ありません。良い[C++の本](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)を説明する必要があります。 – StoryTeller

関連する問題