エラー内容

[戻る]
makoto 2002/02/20(水) 09:52:44
おはようございます。

文字列の連結をしようとすると
「ハンドルされていない例外は a.exe にあります:0xC0000005:Access Violation」
というエラーがデバック中に出ます。

普通に実行すると強制終了になります。
このエラーはどういう意味なのでしょうか?

sara 2002/02/20(水) 10:04:17
例えば、こんなソースを書くと同様のエラーが出るはずです。
-------------------------------
char s[4];
strcpy(s,"123");
strcat(s,"456");
-------------------------------
配列のサイズは4と宣言しているのに、それ以上の書き込みをしているためです。
こんなことはしていませんか?

makoto 2002/02/20(水) 10:16:27
struct Alpha_Table{
    char han[3];    /* 半角 */
    char zen[3];    /* 全角 */
}AlphaTable[]={
    "A","A","B","B","C","C","D","D","E","E",
    "F","F","G","G","H","H","I","I","J","J",...

char szNew[100];

strcat( szNew, (char *)AlphaTable[j].han[0]);

このような感じになっているのですが、
これもsaraさんの言うように、サイズがあっていないのでしょうか?

szNewには何も入っていません。
memset( szNew, 0x00, sizeof(szNew) );
で初期化しています。

sara 2002/02/20(水) 10:36:00
> strcat( szNew, (char *)AlphaTable[j].han[0]);

これはまずいです。正しくは、
  strcat( szNew, AlphaTable[j].han);
又は
  strcat( szNew, &AlphaTable[j].han[0]);

でしょう。
なぜ、エラーになったかというと、2番目の引数で AlphaTable[j].han[0]の値(j=0な
ら'A')をアドレスとしてアクセスしようとしたからです。

makoto 2002/02/20(水) 10:55:10
[[解決]]
saraさんの意見の通りになおしたら
無事にエラーがなくなりました。

ありがとうございました。

古いスレッドには追加発言できません。