を使用した:「使用uninitialsedローカル変数 『名』」:エラー:「使用uninitialsedローカル変数 『名』」C++では、私はこのコードスニペットを書かれている文字*
int main()
{
char *name;
cin >> name;
return 0;
}
それはのようにエラーを与えるコンパイルした後。なぜこれが起こっているのか分かりません。私の問題は何かを説明してください。
ありがとうございました。
を使用した:「使用uninitialsedローカル変数 『名』」:エラー:「使用uninitialsedローカル変数 『名』」C++では、私はこのコードスニペットを書かれている文字*
int main()
{
char *name;
cin >> name;
return 0;
}
それはのようにエラーを与えるコンパイルした後。なぜこれが起こっているのか分かりません。私の問題は何かを説明してください。
ありがとうございました。
char*
は現時点ではどこでも「ポイント」しないchar
へのポインタです。いくつかのメモリを割り当てて、それを指すことができます。
char* name = new char[64];
cin >> name;
delete[] name;
ただし、std::string
を使用してこの要件を回避できます。 http://www.cplusplus.com/forum/articles/6046/
@DeiDeiありがとうございました。 – acron
name
のメモリを割り当てない限り、初期化されていないポインタに書き込んでいます。
これを試してみてください:
#include <iostream>
int main()
{
char *name = new char[100];
std::cin >> name;
delete [] name;
return 0;
}
この文言は誤解を招きます。メモリを割り当てても即時の問題は解決されず、ポインタは初期化されません。値の割り当て(メモリの割り当てが必要な場合としない場合があります)。 – IInspectable
'std :: cin'から書き込もうとすると、メモリを割り当てる必要があります。文字列リテラルを' char * 'ポインタに代入した場合、読み込み専用メモリ –
*" stdから書き込もうとしている場合: :彼はメモリを割り当てる必要があります "* - いいえあなたは有効なポインタが必要です。これはメモリを割り当てることを意味するものではない。 'char buffer [100]; char * name =&buffer [0]; 'メモリを割り当てずに' name'への有効なポインタを割り当てます。有効な値を割り当てることがここのポイントです。 – IInspectable
'name'のが初期化されていない、あなたはそれを使用していますか?私は混乱を理解していない。また、これは即時セグメンテーションです。 – DeiDei
これはエラーではありません。これは、いくつかの静的コードアナライザーによって発行された警告です。おそらくコンパイラーまたは外部ツールです。いずれにしても、警告テキストはかなり曖昧ではありませんか? – IInspectable
'cin >> name'は入力ストリームに文字列を読み込み、' name'が指すメモリに格納するように指示します。あなたのコードでは、 'name'はどのメモリも指していません。 –