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();


Anmelden zum Antworten