0

古くて安っぽい VC6.0 ソフトウェアを使用する必要があります。

コード プロセス ポイントのこの部分は、一種の 3D プリンター用です。多くのポイント (>2 000 000) を取得すると、「0xC0000005: アクセス違反」で失敗します

私は本当に行き詰まっています。これを修正する方法がわかりません。コードは私からのものではありません。malloc が多すぎて、メモリ リークが発生する可能性はありますか?

P_NOEUDP cstr_noeudp()
{
  P_NOEUDP N;

  N=(P_NOEUDP) malloc(sizeof(NOEUDP)); 
  N->classe=NULL; //Here it is 0xC0000005: Access Violation.
  N->face=NULL;
  N->arete_isolee=NULL;
  N->critere=NULL;
  N->data_list=NULL;
  return(N);
}

これは で呼び出されます:

P_SLICE_POINT tpp_Slice_Point_Cstr()
{
    P_SLICE_POINT pSPt;
    pSPt = (P_SLICE_POINT) malloc(sizeof(SLICE_POINT));
    pSPt->Node=cstr_noeudp();
    pSPt->Edge=NULL;
    return pSPt;
}

ヘッダーは次のとおりです。

struct S_NOEUDP
  {
    int          numero;
    double       courbureGaus;
    double       X[3];
    CLASSEMENT   *classe;
    LISTE        *face;
    LISTE        *arete_isolee;
    LISTE        *critere;
    P_DATA_LISTE data_list;
  };

typedef struct S_NOEUDP NOEUDP;
typedef NOEUDP *P_NOEUDP;

struct S_CLASSEMENT
  {
    int    type;
    int    etat;
    int    situation;
  };

typedef struct S_CLASSEMENT CLASSEMENT;
typedef CLASSEMENT *P_CLASSEMENT;

struct S_LISTE
  {
    int    type_liste;
    int    type_occurence;
    void   *occurence;
    int    type_reference;
    void   *reference;
    struct S_LISTE *svt;
    struct S_LISTE *prec;
  };

typedef struct S_LISTE LISTE;
typedef LISTE *P_LISTE;

struct S_DATA_LISTE
  {
   P_LISTE      data_liste;
     };

typedef struct S_DATA_LISTE DATA_LISTE ;
typedef DATA_LISTE  *P_DATA_LISTE ;

typedef struct S_SLICE_POINT SLICE_POINT;
typedef SLICE_POINT *P_SLICE_POINT;
4

1 に答える 1

0

したがって、メモリリークがいっぱいで、エラー制御がない、くだらないコード...

次に何が起こっているのか:

  • メモリリークが原因でメモリがいっぱいになります(解放せずにmalloc)
  • メモリ使用量が32ビット制限に達し、それ以上割り当てることができませんでした
  • コードがハングしますが、mallocのリターンチェックがないため、理由はわかりません。
于 2012-12-18T12:18:48.380 に答える