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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.89142 の関連記事表示

<< 0 >>
■89142  引数 配列をポインタで
□投稿者/ しー -(2018/11/01(Thu) 20:33:53)

    分類:[C/C++] 

    以下のプログラム、
    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);
    }
親記事 /過去ログ153より / 関連記事表示
削除チェック/

■89144  Re[1]: 引数 配列をポインタで
□投稿者/ Jitta -(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バイト分の領域をオーバーしてしまいます。
    
    解決方法は、あなたの開発環境に依存します。
    
記事No.89142 のレス /過去ログ153より / 関連記事表示
削除チェック/

■89145  Re[2]: 引数 配列をポインタで
□投稿者/ しー -(2018/11/01(Thu) 23:21:36)
    No89144 (Jitta さん) に返信

    回答ありがとうございます。

    実装した実際のプログラムは1024個分の配列を用意しています。
    そこに30文字を数字で入れたりする程度なので余裕で余ると思うのですが、デバッグの時に12345と入力してみても、今回のようなエラーが出てしまっています。
    私の考えが間違っているのでしょうか?

    理想としては、hoge[0]=1、hoge[1]=2、…という風にしたいと思っています。


    エラーが出ているポイントは
    > a.output(hoge);
    であって配列に値を入れるところでは出ていないので、今回指摘された箇所に原因があるとは思えないのですが…。


    エラーの部分は、配列を引数としてポインタで渡すという部分にあると思ったのですが違うのでしょうか?
記事No.89142 のレス /過去ログ153より / 関連記事表示
削除チェック/

■89146  Re[3]: 引数 配列をポインタで
□投稿者/ 774RR -(2018/11/02(Fri) 08:28:14)
    オイラが見た範囲、オーバーランさせない(文字をたくさん入力しない)限り動くはずなので
    提示コードはあなたの実験しているコードと一致してないと思う。
記事No.89142 のレス /過去ログ153より / 関連記事表示
削除チェック/

■89149  Re[3]: 引数 配列をポインタで
□投稿者/ にゃるら -(2018/11/02(Fri) 09:28:57)
    No89146 (774RR さん) に返信
    774RRさんに同意。

    No89145 (しー さん) に返信
    > エラーが出ているポイントは
    >>a.output(hoge);
    > であって配列に値を入れるところでは出ていないので、今回指摘された箇所に原因があるとは思えないのですが…。

    ではエラーになったときは何がhogeに入っているのでしょう。
    デバッグ実行してみませんか?

    デバッグ実行できないなら

    int len; // hogeのバイト数を入れてください
    for (int i = 0; i < len; i++)
    {
    count << "hoge[" << i << "]" << hoge[i];
    }

    みたいなコードで確認してみてはいかがでしょうか?

記事No.89142 のレス /過去ログ153より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -