Usare correttamente free()

di Anonimizzato10825 il
12 risposte
Ciao a tutti vorrei imparare ad usare correttamente l'istruzione free() per liberare la memoria occupata da un vettore riempito di oggetti struct mi spiego:

for (unsigned int i=0; i < prioSubChann.size(); i++)
{
struct alloc_map_element* temp=(struct alloc_map_element*)malloc(sizeof(alloc_map_element));
		temp->subchannelID=prioSubChann[i].subChannel;
		temp->priority = prioSubChann[i].priority;
		temp->enb=prioSubChann[i].usr_enb;
		temp->allocated = prioSubChann[i].allocated;
		temp->CQI=prioSubChann[i].cqich;
		temp->user=(Mac48Address)prioSubChann[i].ueAddr;
		prop_alloc_map.push_back(temp);
}
in pratica con il codice precedente riempio il vettore di oggetti alloc_map_element allocati con la malloc

vector <alloc_map_element*> prop_alloc_map;

ora ad un certo punto vorrei cancellare tutti questi oggetti alloc_map_element come dovrei fare?
grazie mille

12 Risposte

  • E' sconsigliato mixare C e C++. io userei un
    vector<std::shared_ptr<alloc_map_element>> il cui pensa da solo a liberare la memoria che si deve allocare con new o con std::make_shared
  • Perdona la mia ignoranza skynet ...
    ma non ho capito come devo fare o come usare questi shared pointer che mi dici tu....mi potresti fare un esempio per cortesia...
  • #include <iostream>
    #include <memory>
    #include <vector>
    
    struct alloc_map_element
    {
    
    };
    
    
    int main()
    {
    	std::vector<std::shared_ptr<alloc_map_element>> vettore;
    
    	for(int i = 0; i < 10; i++)
    	{
    		auto elem = std::make_shared<alloc_map_element>();
    		vettore.push_back(elem);
    	}
    
    	return 0;
    }
    Non c'è bisogno di eliminare gli oggetti in quanto il puntatore smart (shared_ptr) ci pensa da solo quando il reference count scende a zero.
  • skynet ha scritto:


    #include <iostream>
    #include <memory>
    #include <vector>
    
    struct alloc_map_element
    {
    
    };
    
    
    int main()
    {
    	std::vector<std::shared_ptr<alloc_map_element>> vettore;
    
    	for(int i = 0; i < 10; i++)
    	{
    		auto elem = std::make_shared<alloc_map_element>();
    		vettore.push_back(elem);
    	}
    
    	return 0;
    }
    Non c'è bisogno di eliminare gli oggetti in quanto il puntatore smart (shared_ptr) ci pensa da solo quando il reference count scende a zero.

    grazie del consiglio skynet, ma purtroppo non riesco a trovare lo shared_ptr .ho fatto l'inclusione di memory e
    using namespace std;
    ma quando dichiaro il mio vettore..mi segna tutto il rosso...
    sarà anche che sto usando un simulatore di rete NS3 forse vecchio e non è presente questa tipo di puntatore

    vector<shared_ptr<alloc_map_element>> vett;

    consigli ?
    grazie in anticipo
  • Io uso il gcc 3.4 su ubuntu...
  • Considerando che la release attuale di g++ si sta avvicinando alla 4.8, la tua versione risale al permiano. Dovresti aggiornare il compilatore (a meno che tu non abbia l'obbligo di usare la 3.4)
  • Non so se posso aggiornarlo....
  • Qualcuno mi potrebbe suggerire come aggiornare il compilatore alla versione 4.7...
    uso ubuntu 10.10
  • Ragazzi questo metodo non funziona xke io sto lavorando su ubuntu 10.10 mentre la guida è per il 12
Devi accedere o registrarti per scrivere nel forum
12 risposte