2011-07-07 27 views
1

std::cinを使用しようとするとアクセス違反が発生します。 char*を使用していて、データを入力できません。C++ std :: cin未処理の例外:アクセス違反の書き込み場所

void Input(){ 
while(true){ 
    char* _input = ""; 
    std::cin >> _input; //Error appears when this is reached.. 
    std::cout << _input; 
    //Send(_input); 
+0

が重複する可能性をLinuxで](http://stackoverflow.com/qu estions/1773079 /セグメンテーションフォールトとchar配列とポインターインc-on-linux) – iammilind

答えて

1

cinにデータを格納するバッファを指定していません。

operator>>(std::istream&, std::string)は、読み込み中の文字列の記憶域を割り当てますが、呼び出し側が提供するバッファに書き込むoperator>>(std::istream&, char*)を使用しています。書込み可能なバッファを用意していません(文字列リテラルは書き込み不可能です)。アクセス違反。

1
char* _input = ""; // note: it's deprecated; should have been "const char*" 

_inputは、文字列リテラルを指すポインタです。その中に入力することは未定義の動作です。 このお試しください

char _input[SIZE]; // SIZE declared by you to hold the enough characters 

または

std::string _input; 
0

を使用するか:

char _input[1024]; 
std::cin >> _input; 
std::cout << _input; 

またはそれ以上:Cでのchar配列やポインタで[セグメンテーションフォールトの

std::string _input; 
std::cin >> _input; 
std::cout << _input;