Title: | C++ |
Notice: | Read 1.* and use keywords (e.g. SHOW KEY/FULL KIT_CXX_VAX_VMS) |
Moderator: | DECCXX::AMARTIN |
Created: | Fri Nov 06 1987 |
Last Modified: | Thu Jun 05 1997 |
Last Successful Update: | Fri Jun 06 1997 |
Number of topics: | 3604 |
Total number of notes: | 18242 |
HI! Unfortunately, I'm completely lost to figure why the following simple program crashes. More precisly, on OPENVMS ALPHA V6.2 with DEC C V5.5 and latest ECO for CXXL$011_SHR.EXE, it causes the memory leak by 'swallowing' any size of process dynamic memory. The program is: ************************8888******************************************** #include <string.hxx> #include <fstream.hxx> main(int argc,char** argv) { String line=""; String copy=""; ifstream input("a.map"); for (int i=1; input.getline(line,100,'\n') ; i++) { cerr << line << "\n"; line = line(5,line.length()-5); // line = copy; cerr << line << "\n"; } } // A.MAP FILE ** output of "syn_name" - do not change ** * i sc_r1_srx_idlecnt_ma n243 * i sc_r1_s_unlockcnt_ma<1> n190 * i sc_r1_s_unlockcnt_ma<2> n259 * i sc_r1_s_unlockcnt_ma<3> n213 * i sc_r1_s_unlockcnt_ma<13> n237 * i sc_r1_s_unlockcnt_ma<12> n234 * i sc_r1_s_unlockcnt_ma<11> n248 * i sc_r1_srx_idlecnt_ma<2> n242 * i sc_r1_s_unlockcnt_ma<4> n268 * i sc_r1_s_unlockcnt_ma<6> n264 * i sc_r1_srx_cipherenb n187 ** i sc_r1_srx_idlecnt_ma<1> n220 * i sc_r1_srx_idlecnt_ma<3> n230 * i sc_r1_s_unlockcnt_ma<9> n280 * i sc_r1_s_unlockcnt_ma n275 * i sc_r1_s_unlockcnt_ma<8> n196 * i sc_r1_s_unlockcnt_ma<7> n206 * i sc_r1_s_unlockcnt_ma<10> n222 * i sc_r1_srx_testmodea n279 * i sc_r1_s_unlockcnt_ma<5> n197 * i sc_r1_srx_rs_ma n215 * i sc_r1_srx_rs_ma<1> n254 * i sc_r1_srx_rs_ma<2> n194 *************************************************************************************88 THANKS IN ADVANCE! MICHAEL
T.R | Title | User | Personal Name | Date | Lines |
---|---|---|---|---|---|
3507.1 | analysis of problem in .0 | DECC::J_WARD | Thu Mar 20 1997 18:22 | 31 | |
// I think this is the problem: #include <string.hxx> #include <fstream.hxx> void main() { String line=""; ifstream input("a.map"); // there is no istream::getline(String&,...) // therefore line is being silently converted to // a char*, using the internal char* pointer representation // inside the string class. This char* has only been // allocated to hold a null byte, so trying to put 80 // chars into it is going to seg fault... // If you are going to use istream::getline() or // istream::get() you shouldn't use a String argument. // they were never overloaded on String, I think it's // unfortunate that String::operator char* even exists. // The new ANSI string library does not have a conversion. input.getline(line,80); // To do it the right way: // char buf[120]; // whatever the max size of a line is // input.getline(buf,100); // String line(buf); } | |||||
3507.2 | THANKS | TAV02::MILCHIN | Fri Mar 21 1997 04:39 | 11 | |
--> // there is no istream::getline(String&,...) --> // therefore line is being silently converted to --> // a char*, using the internal char* pointer representation --> // inside the string class. This char* has only been --> // allocated to hold a null byte, so trying to put 80 --> // chars into it is going to seg fault... Excelent explanation. I missed the non-existance of Istream::getline(String&,...). Thank you. MICHAEL |