■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バイト分の領域をオーバーしてしまいます。
解決方法は、あなたの開発環境に依存します。
|