Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    43

    [c++]cancellare gli elementi di un vector di struct con puntatori

    compilatore visual studio Express 2012 per Windows
    vorrei cancellare gli elementi del vector,
    devo usare Delete per liberare la memoria allocata con New e poi usare il metodo clear
    o usare direttamente clear?.
    io pensavo di utilizzare delete dentro un ciclo con un iteratore e poi clear
    pero' ricevo il seguente errore.
    Debug Error!
    HEAP CORRUPTION DETECTED: after Normal block (#186) at 0x0095A4D0.
    CRT detected that the application wrote to memory after end of heap buffer.
    grazie.
    codice:
    #include "stdafx.h"
    #include <windows.h>
    #include <iostream>
    #include <vector>
    #include <stdio.h>
    #include <tchar.h>
    #include <conio.h>
    using namespace std;
    typedef struct name_servizio
    {
        LPTSTR lpNameService;
        LPTSTR lpNameDisplay;
        DWORD dwStateCurrent;
    } un_servizio;
    void ReadServices(void);
    
    void _tmain()
    {
    ReadServices(); 
    _getch();
    }
    
    void ReadServices(void)
    {
    vector<un_servizio>unSer;
    vector<un_servizio>::iterator itSer;
    un_servizio servizioCorrente; 
    un_servizio service;
    service.dwStateCurrent = 0;
    service.lpNameService  =L"pippo";
    service.lpNameDisplay =L"paperino";
        servizioCorrente.lpNameService = new TCHAR[_tcslen(service.lpNameService)];
        _tcscpy(servizioCorrente.lpNameService,service.lpNameService);
            servizioCorrente.lpNameDisplay = new TCHAR[_tcslen(service.lpNameDisplay)];
            _tcscpy(servizioCorrente.lpNameDisplay,service.lpNameDisplay);
            servizioCorrente.dwStateCurrent = 2;
                unSer.push_back(servizioCorrente);
                servizioCorrente.dwStateCurrent = 5;
                unSer.push_back(servizioCorrente);
                servizioCorrente.dwStateCurrent = 8;
                unSer.push_back(servizioCorrente);
    
    itSer = unSer.begin();
        for (; itSer != unSer.end(); itSer ++)
        {
            delete itSer->lpNameService;//Errore
            delete itSer->lpNameDisplay;//Errore
        }
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    43
    salve,ho ripreso in mano il codice e ho visto che il problema era che allocavo la memoria
    solo per il primo elemento del vector
    ho inserito tutto in un ciclo For cosi 'da allocare memoria ad ogni elemento,inoltre nelle New ho aumentato di uno la richiesta di memoria e adesso funziona.
    un saluto.


    codice:
    void ReadServices(void)
    {
    vector<un_servizio>unSer;
    vector<un_servizio>::iterator itSer;
    un_servizio servizioCorrente; 
    un_servizio service;
    service.dwStateCurrent = 0;
    service.lpNameService  =L"pippo";
    service.lpNameDisplay =L"paperino";
    for(int c = 0;c <=2; c++)
    {
    size_t size_name = _tcslen(service.lpNameService);
    servizioCorrente.lpNameService = new TCHAR[_tcslen(service.lpNameService)+1];
    _tcscpy(servizioCorrente.lpNameService,service.lpNameService);
        servizioCorrente.lpNameService[size_name] = NULL;
            servizioCorrente.lpNameDisplay = new TCHAR[_tcslen(service.lpNameDisplay)+1];
            _tcscpy(servizioCorrente.lpNameDisplay,service.lpNameDisplay);
                servizioCorrente.dwStateCurrent = 2+c;
                unSer.push_back(servizioCorrente);
    }
    
    for (itSer = unSer.begin(); itSer != unSer.end(); itSer ++)
        {
            wcout << itSer->lpNameService << endl;
            wcout << itSer->lpNameDisplay << endl;
            cout << itSer->dwStateCurrent;
        }
    
    itSer = unSer.begin();
        for (; itSer != unSer.end(); itSer ++)
        {
            delete itSer->lpNameService;
            delete itSer->lpNameDisplay;
        }
        unSer.clear();
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.