<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: As 20 linhas da vergonha</title>
	<atom:link href="http://blog.blabos.org/2009/04/as-20-linhas-da-vergonha/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.blabos.org/2009/04/as-20-linhas-da-vergonha/</link>
	<description>Perl, tecnologia e algum blá blá blá</description>
	<lastBuildDate>Sat, 17 Dec 2011 17:19:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: Blabos de Blebe</title>
		<link>http://blog.blabos.org/2009/04/as-20-linhas-da-vergonha/#comment-2015</link>
		<dc:creator>Blabos de Blebe</dc:creator>
		<pubDate>Wed, 15 Sep 2010 17:44:00 +0000</pubDate>
		<guid isPermaLink="false">http://blog.blabos.org/?p=457#comment-2015</guid>
		<description>A expressão &quot;nós usávamos vetores livremente sem alocar memória&quot; é bastante imprecisa, pois vetores precisam de memória para existir. Provavelmente você quis dizer &quot;nós usávamos vetores livremente sem alocar memória dinamicamente&quot;.

A especificação diz que derreferenciar um ponteiro nulo resulta em comportamento indefinido, o que na maioria dos sistemas (mas não todos), significa um erro fatal.

Isso não é o que está exemplificado acima. No exemplo há uma tentativa de acesso a uma área &#039;supostamente&#039; desalocada.

Ponteiro nulo != ponteiro para área inválida de memória.

&lt;code&gt;
int* ptr_null = 0;

// ptr_null é um ponteiro nulo

int* ptr_foo = new int(123456);
delete ptr_foo;

// ptr_foo aponta para uma área de memória
// que não pertence mais a este programa

printf(&quot;%pn&quot;, ptr_null);
printf(&quot;%pn&quot;, ptr_foo);
&lt;/code&gt;

Compile e execute os exemplos que você vai ver a diferença.

Quanto ao último parágrafo, não, não é isso que acontece. Você está misturando as coisas, o destrutor é só uma rotina que é chamada automaticamente quando um objeto é desalocado, seja por uma chamada a &lt;code&gt;delete&lt;/code&gt; sobre objetos dinamicamente alocados ou por saída de escopo de objetos alocados na pilha.</description>
		<content:encoded><![CDATA[<p>A expressão &#8220;nós usávamos vetores livremente sem alocar memória&#8221; é bastante imprecisa, pois vetores precisam de memória para existir. Provavelmente você quis dizer &#8220;nós usávamos vetores livremente sem alocar memória dinamicamente&#8221;.</p>
<p>A especificação diz que derreferenciar um ponteiro nulo resulta em comportamento indefinido, o que na maioria dos sistemas (mas não todos), significa um erro fatal.</p>
<p>Isso não é o que está exemplificado acima. No exemplo há uma tentativa de acesso a uma área &#8216;supostamente&#8217; desalocada.</p>
<p>Ponteiro nulo != ponteiro para área inválida de memória.</p>
<p><code><br />
int* ptr_null = 0;</p>
<p>// ptr_null é um ponteiro nulo</p>
<p>int* ptr_foo = new int(123456);<br />
delete ptr_foo;</p>
<p>// ptr_foo aponta para uma área de memória<br />
// que não pertence mais a este programa</p>
<p>printf("%pn", ptr_null);<br />
printf("%pn", ptr_foo);<br />
</code></p>
<p>Compile e execute os exemplos que você vai ver a diferença.</p>
<p>Quanto ao último parágrafo, não, não é isso que acontece. Você está misturando as coisas, o destrutor é só uma rotina que é chamada automaticamente quando um objeto é desalocado, seja por uma chamada a <code>delete</code> sobre objetos dinamicamente alocados ou por saída de escopo de objetos alocados na pilha.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ♣♦ Cheshire Hime ♥♠</title>
		<link>http://blog.blabos.org/2009/04/as-20-linhas-da-vergonha/#comment-2012</link>
		<dc:creator>♣♦ Cheshire Hime ♥♠</dc:creator>
		<pubDate>Wed, 15 Sep 2010 12:53:00 +0000</pubDate>
		<guid isPermaLink="false">http://blog.blabos.org/?p=457#comment-2012</guid>
		<description>Não não, eu falo em tempo de execução mesmo... No início, quando eu estava aprendendo a programar, nosso professor nos ensinou vetores antes de alloc, malloc e calloc e, desta forma, nós usávamos vetores livremente sem alocar memória...

Raramente dava algum erro de memória protegida pelo sistema operacional... 
De resto, não aparecia erro algum, nem na compilação nem na execução.

Claro que isto não era com objetos, era apenas com C, nas aulas de programação estruturada... Por isso a minha dúvida... Em C++, usando new ao invés de alloc, o programa gera erros em tempo de execução se eu tentar usar uma memória não alocada?

Acho que seria bom vermos nas especificações da linguagem, afinal, o destrutor, além de desalocar memória, pode protegê-la até a finalização do programa ou algo assim... ou isto não acontece?</description>
		<content:encoded><![CDATA[<p>Não não, eu falo em tempo de execução mesmo&#8230; No início, quando eu estava aprendendo a programar, nosso professor nos ensinou vetores antes de alloc, malloc e calloc e, desta forma, nós usávamos vetores livremente sem alocar memória&#8230;</p>
<p>Raramente dava algum erro de memória protegida pelo sistema operacional&#8230;<br />
De resto, não aparecia erro algum, nem na compilação nem na execução.</p>
<p>Claro que isto não era com objetos, era apenas com C, nas aulas de programação estruturada&#8230; Por isso a minha dúvida&#8230; Em C++, usando new ao invés de alloc, o programa gera erros em tempo de execução se eu tentar usar uma memória não alocada?</p>
<p>Acho que seria bom vermos nas especificações da linguagem, afinal, o destrutor, além de desalocar memória, pode protegê-la até a finalização do programa ou algo assim&#8230; ou isto não acontece?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Blabos de Blebe</title>
		<link>http://blog.blabos.org/2009/04/as-20-linhas-da-vergonha/#comment-2011</link>
		<dc:creator>Blabos de Blebe</dc:creator>
		<pubDate>Wed, 15 Sep 2010 04:43:00 +0000</pubDate>
		<guid isPermaLink="false">http://blog.blabos.org/?p=457#comment-2011</guid>
		<description>Primeiramente obrigado pela visita!

É C++ com g++, pequena padawan :)

Depende do que você considera &quot;exibir erros&quot;.

Em tempo de compilação ou em tempo de execução?

No caso acima, a inexperiência esperava (cacofônica essa!) a destruição automática por saída de escopo (o que não existe para um objeto dinamicamente alocado em C++), seguida pela derreferenciação de um ponteiro que apontava para uma área (previamente) desalocada de memória, ocasionando um erro fatal em tempo de execução.

Adicione um &lt;code&gt;delete str;&lt;/code&gt; após a linha 14 que você perceberá a sutil diferença.

Ambos os testes não dão nem warning em tempo de compilação.</description>
		<content:encoded><![CDATA[<p>Primeiramente obrigado pela visita!</p>
<p>É C++ com g++, pequena padawan <img src='http://blog.blabos.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Depende do que você considera &#8220;exibir erros&#8221;.</p>
<p>Em tempo de compilação ou em tempo de execução?</p>
<p>No caso acima, a inexperiência esperava (cacofônica essa!) a destruição automática por saída de escopo (o que não existe para um objeto dinamicamente alocado em C++), seguida pela derreferenciação de um ponteiro que apontava para uma área (previamente) desalocada de memória, ocasionando um erro fatal em tempo de execução.</p>
<p>Adicione um <code>delete str;</code> após a linha 14 que você perceberá a sutil diferença.</p>
<p>Ambos os testes não dão nem warning em tempo de compilação.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ♣♦ Cheshire Hime ♥♠</title>
		<link>http://blog.blabos.org/2009/04/as-20-linhas-da-vergonha/#comment-1896</link>
		<dc:creator>♣♦ Cheshire Hime ♥♠</dc:creator>
		<pubDate>Tue, 14 Sep 2010 23:00:17 +0000</pubDate>
		<guid isPermaLink="false">http://blog.blabos.org/?p=457#comment-1896</guid>
		<description>Hmm... Eu não tenho certeza qual compilador foi usado ou qual versão da linguagem, mas, que eu saiba, o C não exibe erros ao acessar memória desalocada a não ser que seja protegida pelo sistema operacional... O C++ exibe?</description>
		<content:encoded><![CDATA[<p>Hmm&#8230; Eu não tenho certeza qual compilador foi usado ou qual versão da linguagem, mas, que eu saiba, o C não exibe erros ao acessar memória desalocada a não ser que seja protegida pelo sistema operacional&#8230; O C++ exibe?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Junio</title>
		<link>http://blog.blabos.org/2009/04/as-20-linhas-da-vergonha/#comment-1895</link>
		<dc:creator>Junio</dc:creator>
		<pubDate>Sun, 12 Sep 2010 05:47:48 +0000</pubDate>
		<guid isPermaLink="false">http://blog.blabos.org/?p=457#comment-1895</guid>
		<description>Blabos, muito obrigado pela passagem de experiência. Muito rico o texto. Paz e saúde para ti.</description>
		<content:encoded><![CDATA[<p>Blabos, muito obrigado pela passagem de experiência. Muito rico o texto. Paz e saúde para ti.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: blabos</title>
		<link>http://blog.blabos.org/2009/04/as-20-linhas-da-vergonha/#comment-1796</link>
		<dc:creator>blabos</dc:creator>
		<pubDate>Tue, 07 Apr 2009 02:45:59 +0000</pubDate>
		<guid isPermaLink="false">http://blog.blabos.org/?p=457#comment-1796</guid>
		<description>Ultimamente pra mim o tempo não tá voando, tá indo de teleporte...</description>
		<content:encoded><![CDATA[<p>Ultimamente pra mim o tempo não tá voando, tá indo de teleporte&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Marcus Antonius</title>
		<link>http://blog.blabos.org/2009/04/as-20-linhas-da-vergonha/#comment-1795</link>
		<dc:creator>Marcus Antonius</dc:creator>
		<pubDate>Mon, 06 Apr 2009 18:19:47 +0000</pubDate>
		<guid isPermaLink="false">http://blog.blabos.org/?p=457#comment-1795</guid>
		<description>História muito interessante!!
Mais bagagem pra quem acompanhou o debate!

Outra coisa interessante é a falta de 18 dias para o lançamento do novo Ubuntu!!
(mas já?????????? O tempo voa!)</description>
		<content:encoded><![CDATA[<p>História muito interessante!!<br />
Mais bagagem pra quem acompanhou o debate!</p>
<p>Outra coisa interessante é a falta de 18 dias para o lançamento do novo Ubuntu!!<br />
(mas já?????????? O tempo voa!)</p>
]]></content:encoded>
	</item>
</channel>
</rss>

