2017-01-19 4 views
-1

を使用した:「使用uninitialsedローカル変数 『名』」:エラー:「使用uninitialsedローカル変数 『名』」C++では、私はこのコードスニペットを書かれている文字*

int main() 
{ 
    char *name; 
    cin >> name; 

    return 0; 
} 

それはのようにエラーを与えるコンパイルした後。なぜこれが起こっているのか分かりません。私の問題は何かを説明してください。

ありがとうございました。

+6

'name'のが初期化されていない、あなたはそれを使用していますか?私は混乱を理解していない。また、これは即時セグメンテーションです。 – DeiDei

+0

これはエラーではありません。これは、いくつかの静的コードアナライザーによって発行された警告です。おそらくコンパイラーまたは外部ツールです。いずれにしても、警告テキストはかなり曖昧ではありませんか? – IInspectable

+3

'cin >> name'は入力ストリームに文字列を読み込み、' name'が指すメモリに格納するように指示します。あなたのコードでは、 'name'はどのメモリも指していません。 –

答えて

3

char*は現時点ではどこでも「ポイント」しないcharへのポインタです。いくつかのメモリを割り当てて、それを指すことができます。

char* name = new char[64]; 
cin >> name; 
delete[] name; 

ただし、std::stringを使用してこの要件を回避できます。 http://www.cplusplus.com/forum/articles/6046/

+0

@DeiDeiありがとうございました。 – acron

0

nameのメモリを割り当てない限り、初期化されていないポインタに書き込んでいます。

これを試してみてください:

#include <iostream> 

int main() 
{ 
    char *name = new char[100]; 
    std::cin >> name; 
    delete [] name; 
    return 0; 
} 
+0

この文言は誤解を招きます。メモリを割り当てても即時の問題は解決されず、ポインタは初期化されません。値の割り当て(メモリの割り当てが必要な場合としない場合があります)。 – IInspectable

+0

'std :: cin'から書き込もうとすると、メモリを割り当てる必要があります。文字列リテラルを' char * 'ポインタに代入した場合、読み込み専用メモリ –

+0

*" stdから書き込もうとしている場合: :彼はメモリを割り当てる必要があります "* - いいえあなたは有効なポインタが必要です。これはメモリを割り当てることを意味するものではない。 'char buffer [100]; char * name =&buffer [0]; 'メモリを割り当てずに' name'への有効なポインタを割り当てます。有効な値を割り当てることがここのポイントです。 – IInspectable

関連する問題