■No89142 (しー さん) に返信 > 以下のプログラム、 > a.output(hoge)の部分で > > 0x00C11258 で例外がスローされました (プログラム名.exe 内): 0xC0000005: 場所 0x00D10000 への書き込み中にアクセス違反が発生しました > > というエラーが出ます。 > どういったことが原因で生じているのでしょうか? > > また解決方法はどのようになりますか? > > ======================= > > class A{ > public: void output(char *hoge){ > cout << hoge; > } > } > > int main(){ > char hoge[10]; > cout<<"10文字入力"; > cin>>hoge; > A a; > a.output(hoge); > } 「10文字入力」で、10文字入力したんですか? 10文字って、どういう文字を入れました? char hoge[10] ですが、「10って書いたから10文字」ではありません。 これは「10個分の容器を用意した」で、容器の1つを「終端子」に使います。よって、実際に使えるのは9個分です。 また、「文字」って、何を入れました? あるいは、char hoge[10] は、「10文字分」ではありません。「文字10個分(内1つは終端子)」でもありません。 「10バイト分(内1バイトは終端子)」です。 1文字を表現するためには、1バイト以上を使います。 よって、2バイト以上使う文字を含んでいれば、10バイト分の領域をオーバーしてしまいます。 解決方法は、あなたの開発環境に依存します。
- Child Tree -