Cred ca situatia este urmatoarea: return 0 da sansa bibliotecii standard C sa isi apeleze destructorul de la clasa string. exit(0) iese imediat, fara sa apeleze destructorul.<br><br>E o non-problema asta pentru tine :).<br>
<br><br><div><span class="gmail_quote">On 11/1/07, <b class="gmail_sendername">Andrei Ciuca</b> &lt;<a href="mailto:andrei.ciuca@gmail.com">andrei.ciuca@gmail.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Salut, ai dreptate.<br>In timp ce scoteam cod, am observat urmatoarea chestie :<br>Daca rulez codul asta :<br><br>int main()<span class="q"><br>{<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; cout &lt;&lt; &quot;\n&gt; &quot;;<br>&nbsp;&nbsp;&nbsp; string line;<br>&nbsp;&nbsp;&nbsp; getline(cin, line);
<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; command_t* root = NULL;<br></span>&nbsp;&nbsp;&nbsp; parse_line(line.c_str(), &amp;root);<br><br>&nbsp;&nbsp;&nbsp; free_parse_memory();<br><br>&nbsp;&nbsp;&nbsp; exit(0);<br><br>}<br><br>Da outputul asta :<br><br>==2981== Memcheck, a memory error detector.
<br>==2981== Copyright (C) 2002-2006, and GNU GPL&#39;d, by Julian Seward et al.<br>==2981== Using LibVEX rev 1606, a library for dynamic binary translation.<br>==2981== Copyright (C) 2004-2006, and GNU GPL&#39;d, by OpenWorks LLP.
<br>==2981== Using valgrind-3.2.0-Debian, a dynamic binary instrumentation framework.<br>==2981== Copyright (C) 2000-2006, and GNU GPL&#39;d, by Julian Seward et al.<br>==2981== For more details, rerun with: -v<br>==2981== 
<br>==2981== My PID = 2981, parent PID = 2259.&nbsp; Prog and args are:<br>==2981==&nbsp;&nbsp;&nbsp; ./tema1<br>==2981== <br>--2981-- DWARF2 CFI reader: unhandled CFI instruction 0:50<br>--2981-- DWARF2 CFI reader: unhandled CFI instruction 0:50
<br>==2981== <br>==2981== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 17 from 1)<br>==2981== malloc/free: in use at exit: 17 bytes in 1 blocks.<br>==2981== malloc/free: 12 allocs, 11 frees, 209 bytes allocated.<br>

==2981== For counts of detected errors, rerun with: -v<br>==2981== searching for pointers to 1 not-freed blocks.<br>==2981== checked 108,104 bytes.<br>==2981== <br>==2981== 17 bytes in 1 blocks are possibly lost in loss record 1 of 1
<br>==2981==&nbsp;&nbsp;&nbsp; at 0x401B8C7: operator new(unsigned) (vg_replace_malloc.c:163)<br>==2981==&nbsp;&nbsp;&nbsp; by 0x40B0C6A: std::string::_Rep::_S_create(unsigned, unsigned, std::allocator&lt;char&gt; const&amp;) (in /usr/lib/libstdc++.so.6.0.8)
<br>==2981==&nbsp;&nbsp;&nbsp; by 0x40B1BE9: std::string::_Rep::_M_clone(std::allocator&lt;char&gt; const&amp;, unsigned) (in /usr/lib/libstdc++.so.6.0.8)<br>==2981==&nbsp;&nbsp;&nbsp; by 0x40B35E7: std::string::reserve(unsigned) (in /usr/lib/libstdc++.so.6.0.8)
<br>==2981==&nbsp;&nbsp;&nbsp; by 0x4089126: std::basic_istream&lt;char, std::char_traits&lt;char&gt; &gt;&amp; std::getline&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;(std::basic_istream&lt;char, std::char_traits&lt;char&gt; &gt;&amp;, std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;&amp;, char) (in /usr/lib/libstdc++.so.6.0.8)
<br>==2981==&nbsp;&nbsp;&nbsp; by 0x40A2178: std::basic_istream&lt;char, std::char_traits&lt;char&gt; &gt;&amp; std::getline&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;(std::basic_istream&lt;char, std::char_traits&lt;char&gt; &gt;&amp;, std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;&amp;) (in /usr/lib/libstdc++.so.6.0.8)
<br>==2981==&nbsp;&nbsp;&nbsp; by 0x80493E9: main (tema1.cpp:875)<br>==2981== <br>==2981== LEAK SUMMARY:<br>==2981==&nbsp;&nbsp;&nbsp; definitely lost: 0 bytes in 0 blocks.<br>==2981==&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; possibly lost: 17 bytes in 1 blocks.<br>==2981==&nbsp;&nbsp;&nbsp; still reachable: 0 bytes in 0 blocks.
<br>==2981==&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suppressed: 0 bytes in 0 blocks.<br><br><br>Daca rulez codul asta (diferenta este ca in loc sa dau &quot;exit(0)&quot; dau &quot;return 0&quot; ):<br><br>int main()<span class="q"><br>{<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; cout &lt;&lt; &quot;\n&gt; &quot;;
<br>&nbsp;&nbsp;&nbsp; string line;<br>&nbsp;&nbsp;&nbsp; getline(cin, line);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; command_t* root = NULL;<br></span>&nbsp;&nbsp;&nbsp; parse_line(line.c_str(), &amp;root);<br><br>&nbsp;&nbsp;&nbsp; free_parse_memory();<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; return 0;<br>}<br><br>atunci valgrind spune ca totul e ok - &quot;no memory leaks possible&quot;.
<br>
<br>_______________________________________________<br>so mailing list<br><a onclick="return top.js.OpenExtLink(window,event,this)" href="mailto:so@cursuri.cs.pub.ro">so@cursuri.cs.pub.ro</a><br><a onclick="return top.js.OpenExtLink(window,event,this)" href="http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so" target="_blank">
http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so</a><br><br></blockquote></div><br>