本ページは公開が終了した情報の複製であり、掲載時点での情報です。本ページに記載されている内容について各所に問い合わせることはご遠慮下さい。
サポート技術情報

[QC20]qsort 関数で要素の大きさが67byte以上のソートができない

文書番号: 402699

最終更新日: 1998/03/23


この資料は以下の製品について記述したものです。


この記事は、以前は次の ID で公開されていました: JP402699

概要

この資料は、qsort 関数の実行によりプログラムが暴走する現象について説明したもの です。

詳細

1 つのデータセグメントを扱うメモリモデル (スモール、ミディアム) で、要素の
大きさが 67byte 以上の配列に対し、qsort 関数を実行すると、プログラムが
暴走してしまいます。これは構造体配列、多次元配列いずれでも発生します。

再現プログラム

  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <conio.h>
  #define SIZ 3
  #define LEN 67
  struct abc{
    char s[LEN];
  }dat[SIZ]={{"99"},{"22"},{"11"}};
  void dspdata(void);
  int  compare(const void *arg1, const void *arg2);
  void main(void)
  {
    printf( "----ソート前----\n");
    dspdata();
    getch();
    qsort( (void *)dat, (size_t)SIZ, sizeof(struct abc), compare);
    printf( "----ソート後----\n");
    dspdata();
    getch();
  }
  void dspdata(void)
  {
    int i;
    for(i=0;i<SIZ;i++)
      printf( "%s\n", dat[i].s );
  }
  int  compare(const void *arg1, const void *arg2)
  {
    return strcmp(((struct abc *)arg1)->s,((struct abc *)arg2)->s);
  }

原因

qsort 関数の障害です。

対処方法

要素の大きさを 66byte 以下に抑えるか、メモリモデルを複数のデータセグ
メントを扱うメモリモデル (コンパクト、ラージ、ヒュージ) に変更する事で
回避できます。

詳細

  • Visual C++ は、米国 Microsoft Corporation の商標です。

Keywords: KBBUG KB402699
Technology: kbAudDeveloper kbCCompSearch kbQC200 kbZNotKeyword3

inserted by FC2 system