C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■89144 / )  Re[1]: 引数 配列をポインタで
□投稿者/ Jitta (421回)-(2018/11/01(Thu) 23:03:25)
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 -