Witam.
Mam problem otóż dotyczmy on vectora którego nie potrafię wprowadzić do mojego programu tak aby nie było błędów naruszenia ochrony pamięci.
Tutaj źródła do programu (chodzi dokładnie o plik main.cpp) :
http://code.google.com/p/minidbxml/source/browse/#svn%2FMiniDBXML-0.0.7%2Fmain
Czy ktoś by mi pomógł wprowadzić je bezboleśnie ? Ponieważ baza danych która ma statycznie zadeklarowany rozmiar tablicy nie nadaje się do normalnej pracy bazy.
Wpadłem na taki sposób wprowadzania i wypełniania tablicy vectorowej"
int pre_load()
{
string* mv = new string;
int*st_= new int;
*st_=0;
int l=0;
counter_e=0;
vid=1;
ifstream*file=new ifstream;
string*ow=new string;
*ow=path_db+".xml";
dane.resize(1);
file->open(ow->c_str(),ios::in);
while(!file->eof())
{
getline(*file,*mv);
if(*mv=="<tag>" ){ *st_=1; } else{
if(mv->length()!=NULL){
if(*mv=="</tag>")
{*st_=0; }
else{
if(*st_==1){
l++;
dane[0].push_back(mv->substr(4,mv->length()-9));
parse_xml_tag(mv->substr(4,mv->length()-9),l);
}
}
}
}
}
file->close();
delete mv;
delete file;
delete st_;
delete ow;
}
int parse_xml_tag(string name_tag_find,int id)
{
vid=id;
counter_e=0;
string*mem=new string;
string*name_tag=new string;
*name_tag=name_tag_find;
string*name_tag_=new string ;
ifstream*file= new ifstream;
string*dw=new string;
*dw=path_db+".xml";
file->open(dw->c_str(),ios::in);
while(!file->eof())
{
getline(*file,*mem);
*name_tag_="<"+name_tag_find+">";
for(int i=0;i<mem->length();i++){
if(mem->substr(i,i+name_tag_->length())==*name_tag_)
{
*name_tag="</"+name_tag_find+">";
for(int m=i+name_tag_->length();m<mem->length();m++){
if(mem->substr(m,m+name_tag->length())==*name_tag){
counter_e++;
dane.resize(counter_e+1);
if(counter_e>=max_e){}
else{
dane[counter_e].push_back(mem->substr(i+name_tag_->length(),m-name_tag->length()+1)) ;
}
}
}
}
}
}
file->close();
delete dw;
delete file;
delete mem;
delete name_tag_;
}
ale no niestety na funkcji int view_database() program się crashuje właśnie z błędem ochrony pamieci.