Newsgroup: it.comp.programmare.win32
Titolo: problemi con la HEAP (VC++)

ciao, ho un problema con la heap che non riesco a risolvere e mi perseguita
da alcuni giorni.
Mi scuso per la terminologia forse non corretta e ringrazio anticipatamente
per eventuali suggerimenti.
Dichiaro un puntatore ad una mia classe CPezzo (che poi č come una struct):
CPezzo *A_Pezzi;
Poi creo un array di oggetti nella heap in questo modo:
A_Pezzi = new CPezzo[n_pez];
Poi alla fine libero la heap in questo modo:
delete [] A_Pezzi;
Cosa diavolo c'č che non va? (e a volte manda in crash il mio programma e il
sistema).
Grazie.
DANILO

 sistema).
spesso gli errori di memoria sono molto subdoli,se posti la parte di prog
che dà problemi abbiamo + possibilità di esserti di aiuto.
comunque prova a mettere un breakpoint quando il contenuto del vettore
cambia e controlla che ciò non avvenga quando tu non vuoi.
ciao.

 ha scritto nel messaggio
news:9tio34$ql0$1...@news.ngi.it...

Grazie.
Ciao.
Vi posto qualcosa di più preciso:
class CPezzo
{
public:
    int id;
    int disp;
    int usati;
    int dx;
    int dy;
    int nr;
public:
    CPezzo& operator=(const CPezzo &p);
};
CPezzo& CPezzo::operator=(const CPezzo &p)
{
    if (this == &p) return *this;
    id      = 
p.id
;
    disp    = p.disp;
    usati   = p.usati;
    dx      = p.dx;
    dy      = p.dy;
    nr      = 
p.nr
;
     return *this;
}
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////
class CCorexDlg : public CDialog
{
// Construction
public:
 CCorexDlg(CWnd* pParent = NULL);   // standard constructor
    ~CCorexDlg();
// Attributes
public:
    CPezzo *A_Pezzi;
// Dialog Data
 //{{AFX_DATA(CCorexDlg)
 enum { IDD = IDD_COREX };
 CButton m_StartControl;
 //}}AFX_DATA
// Overrides
 // ClassWizard generated virtual function overrides
 //{{AFX_VIRTUAL(CCorexDlg)
 protected:
 virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
 //}}AFX_VIRTUAL
// Implementation
public:
 BOOL OnInitDialog();
// Generated message map functions
 //{{AFX_MSG(CCorexDlg)
 afx_msg void OnStart();
 //}}AFX_MSG
 DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately
before the previous line.
////////////////////////////////////////////////////////////////////////////
/
// CCorexDlg dialog
CCorexDlg::CCorexDlg(CWnd* pParent /*=NULL*/)
 : CDialog(CCorexDlg::IDD, pParent)
{
 //{{AFX_DATA_INIT(CCorexDlg)
 //}}AFX_DATA_INIT
}
CCorexDlg::~CCorexDlg()
{
    delete [] A_Pezzi;
}
void CCorexDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 //{{AFX_DATA_MAP(CCorexDlg)
 DDX_Control(pDX, IDC_START, m_StartControl);
 //}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCorexDlg, CDialog)
 //{{AFX_MSG_MAP(CCorexDlg)
 ON_BN_CLICKED(IDC_START, OnStart)
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()
////////////////////////////////////////////////////////////////////////////
/
// CCorexDlg message handlers
////////////////////////////////////////////////////////////////////////////
/
// Inizializzazione della finestra COREX
BOOL CCorexDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    //n_pez me lo calcolo in qualche modo.
    A_Pezzi = new CPezzo[n_pez];
    return TRUE;
}
////////////////////////////////////////////////////////////////////////////
/
// OnStart
void CCorexDlg::OnStart()
{
    //mio algoritmo
}

 Vi posto qualcosa di più preciso:
[cut]
.........
capisco che non tu non voglia postare il tuo algoritmo,ma è evidente che sia
lì il problema;il resto del codice non fà proticamente nulla.
esegui un debug molto accurato e tieni d'occhio tutte le variabili,l'errore
lo troverai.
ciao.

 delete [] A_Pezzi;
Per caso CPezzo e` una classe non derivata da CObject? Se la risposta e`
si`, anche io tempo fa ho segnalato su questo stesso NG (senza essere preso
troppo sul serio) questo problema, che sembra avvenire in maniera
sistematica col Visual C++. Io ho risolto alla bell'e meglio derivando da
CObject tutte le classi per cui dovevo allocare degli array con new.
--
Lorenzo