J'ai créé une mémoire partagée qui contient une liste. Je dois continuellement ajouter des nœuds dans la liste. Mon autre application lit la liste et affiche le contenu lu. Le problème que je suis confronté est le nœud a éclaté ne libère pas la mémoire ainsi pendant que la première application continue à l'insertion à un point où elle jette la faute de segmentation. Veuillez me guider comme comment libérer le noeud afin que cet espace puisse être utilisé par ma première application pour allouer un nouveau noeud.Libération de la mémoire d'un noeud dans la mémoire partagée à l'aide de la bibliothèque boost
Snippet de mon code est
#include </tcs/dev/lib/boost_1_38_0/boost/interprocess/managed_shared_memory.hpp>
#include </tcs/dev/lib/boost_1_38_0/boost/interprocess/containers/list.hpp>
#include </tcs/dev/lib/boost_1_38_0/boost/interprocess/allocators/allocator.hpp>
#include </tcs/dev/lib/boost_1_38_0/boost/multi_index_container.hpp>
#include <algorithm>
#include<iostream>
using namespace std;
using namespace boost;
using namespace multi_index;
class marketdata
{
public:
int x;
float y;
};
int main()
{
marketdata m[0];
m[0].x=1;
m[0].y=1;
// boost::interprocess::list iterator itr;
using namespace boost::interprocess;
try{
managed_shared_memory segment
(open_only
,"MySharedMemory"); //segment name
typedef boost::interprocess::allocator<marketdata, managed_shared_memory::segment_manager>
ShmemAllocator;
typedef boost::interprocess::list<marketdata, ShmemAllocator> MyList;
MyList *mylist = segment.find<MyList>("MyList").first;
boost::interprocess::list<marketdata, ShmemAllocator> :: iterator itr;
for(itr=mylist->begin(); itr != mylist->end(); ++itr)
{ cout << (*itr).x << " ";
cout << endl;
mylist->pop_front();
//multi_index::multi_index_container::delete_node_(itr);
sleep(1);
}
segment.destroy<MyList>("MyList");
}
catch(...){
shared_memory_object::remove("MySharedMemory");
throw;
}
shared_memory_object::remove("MySharedMemory");
return 0;
}
Pourquoi les chemins absolus dans votre include? Cela va faire la mise à niveau vers les versions ultérieures vraiment nul! –
Merci Billy pour votre suggestion. C'était juste pour un but de test, donc j'ai ajouté des chemins absolus. Vraiment changer cela – user531805