Привет, в названии написано все действительно. У меня есть метод, который читается в файле, хранящем данные о составе материалов (например, в виде полиэтилена или природного состава свинца), каждый из этих материалов содержится в различных объектах и каждый из них имеет различную композицию. Метод make называется последовательно, так как когда-то материалы, составляющие физическую систему, получаются из другого файла, это естественный следующий шаг. То, что записано в списке, это o/p для файла, то что такое на самом деле в списке op до конца этого файла. Как избежать утечки?Последовательные вызовы длинному методу производят разлив
void material::make(char* filename)
{
ifstream fin(filename) ;
ofstream filenameOUT ;
string outfile = (string)filename + "OUT.txt" ;
filenameOUT.open(outfile.c_str()) ;
string ZStr, propStr, isotope ;
vector<float> component(2,0) ;
getline(fin, propStr, '\n') ; //store first entry in file as a str (prop is used to save mem allocation)
lamda = atof(propStr.c_str()) ; //then convert to float so calcs can be done
filenameOUT<<"lamda: "<<lamda<<endl;
while(!fin.eof())
{
getline(fin, isotope, ' ') ; //get the element name
getline(fin, ZStr, '\t') ; //get the Z's and abunancies from the file.
getline(fin, propStr) ;
component[0] = atof(ZStr.c_str()) ;
component[1] = atof(propStr.c_str()) ;
filenameOUT<<"isotope: "<<isotope<<" isotope Z: "<<component[0]<<" proportional amount: "<<component[1]<<endl;
composition.push_back(component) ;
elements.push_back(isotope) ;
}
filenameOUT<<filename<<" is loaded"<<endl;
for(c=composition.begin();c!=composition.end();c++)
{
filenameOUT<<(*c)[0]<<" : "<<(*c)[1]<<" is loaded"<<endl;
}
}
, например, входной файл для полиэтилена:
.335657
carbon 12 .33333
hydrogen 1 .66667
производит этот (который содержит изотопы свинца, меди, бора, водорода в три раза и углерода один раз):
lamda: 0.335657
isotope: carbon isotope Z: 12 proportional amount: 0.33333
isotope: hydrogen isotope Z: 1 proportional amount: 0.66667
poly.txt is loaded
11 : 0.04 is loaded
10 : 0.01 is loaded
12 : 0.31778 is loaded
1 : 0.63332 is loaded
1 : 0.63332 is loaded
204 : 0.014 is loaded
206 : 0.241 is loaded
207 : 0.221 is loaded
208 : 0.524 is loaded
208 : 0.524 is loaded
106 : 0.0125 is loaded
108 : 0.0089 is loaded
110 : 0.1249 is loaded
111 : 0.128 is loaded
112 : 0.2413 is loaded
113 : 0.1222 is loaded
114 : 0.2873 is loaded
116 : 0.0749 is loaded
12 : 0.33333 is loaded
1 : 0.66667 is loaded
любой совет высоко ценится! (и, да, он говорит «void» в качестве возврата. Я мог дождаться возврата от каждого вызова метода до того, как я запустил следующий, но я не знаю, как это сделать.)
У меня НЕ МОЖЕТ БЫТЬ НАЙДЕН ПУТЬ, ЧТОБЫ ДЕЛАТЬ ЭТО НА ДВОРЕЦЫ, ПОТОМУ ЧТО Я ДЕЙСТВИТЕЛЬНО НЕ ЗНАЮ, ЧТО ТЕРМИНОЛОГИЯ, ЕСЛИ ЭТО СЛУЧАЙНЫЕ ССЫЛКИ К ФИКСИРОВАННЫМ ПРОБЛЕМАМ ВЕЛИКИЙ!
Извините, ваш вопрос непонятен. Что вы подразумеваете под «пролитием»? Может быть, вы можете показать, какой результат ожидался? – atzz 2010-12-07 12:20:50
короче, о/р должен выглядеть следующим образом: лямд: 0,335657 изотопов: изотоп углерод Z: 12 пропорциональное количество: 0,33333 изотопов: изотоп водород Z: 1 пропорциональное количество: 0,66667 poly.txt загружается 12 : Загружается 0.31778 Загружается 1: 0.63332 – morb 2010-12-07 15:22:52