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 回答