Pointer Prob
-
// split datavector into vector xsddata and xmldata void xml::getrawdata(vector <string> rawdatavec,vector <string> *XsdData,vector <string> *XmlData) { size_t xsdstart, xsdend; string temp, xsd, xml; vector <string>::iterator it; for ( it=rawdatavec.begin() ; it < rawdatavec.end(); it++ ) { // Xsd Parse temp = *it; xsdstart = temp.find("<xsd:complexType"); xsdend = temp.find("</xsd:complexType>"); xsd = temp.substr(xsdstart,xsdend - xsdstart +18); XsdData->push_back(xsd); // Xml Parse xml = temp.substr(xsdend+18); XmlData->push_back(xml); } delete XsdData, XmlData; }int base::setdata(vector <string> testdata) { typedef vector <string> Xdat; xml mainxml; Xdat xsddata; Xdat xmldata; mainxml.getrawdata(testdata,&xsddata,&xmldata); //create xmldata string xmlmaindata = mainxml.createxml(getxdata(xsddata),getxdata(xmldata)); //clear data form the pointer xmldata.clear(); xsddata.clear(); //set local variables string xslfile,userid,userpdf,printpdf,rmpdf; //ID for incoming testdata userid = generrateuuid(); //create Pdf file path with the usrid userpdf="/tmp/"; userpdf+=userid; userpdf+=".pdf"; //Create a pdf mainxml.xml2pdf(xmlmaindata, "/local/administrator/Dokumente/test.xsl", userpdf); //print pdf printpdf="lpr "; printpdf+=userpdf; //system(stringtoconstchar(printpdf)); //remove pdf rmpdf="rm "; rmpdf+=userpdf; system(stringtoconstchar(rmpdf)); // write in postgresql db und development database maindb; maindb.exec(userid,xmlmaindata); return 0; }Bekomme Speicher zugriff Fehler kann den Fehler nicht finden, wenn ich das delete in der Funktion getrawdata wegnehme ist speicher zugriff Fehler weg aber der Pointer füllt sich und wird nicht gelösche so das sich die Daten immer an sammeln.
-
Du hast nirgendwo ein new, also darfst du auch kein delete aufrufen! Wenn sich dein vector immer weiter füllt, liegt das wahrscheinlich daran, dass du das einfach so programmiert hast...
-
Tuxist schrieb:
delete XsdData, XmlData;Tut mit ziemlicher Sicherheit nicht das, was du erwartest.
Pointer füllt sich und wird nicht gelösche so das sich die Daten immer an sammeln.
Pointer füllen sich nicht. Was willst du damit sagen?
Du solltest dir nochmal das Buch/Tutorial deiner Wahl vornehmen und dich mit den Container-Methoden beschäftigen. std::vector<>::erase() könnte sein was du suchst.
-
re:
xmldata.clear(); xsddata.clear();
-
ich habe es:
XsdData->clear(); XmlData->clear();