<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>A problem about al_destory_bitmap function</title>
		<link>http://www.allegro.cc/forums/view/611616</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 15 Dec 2012 21:05:30 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I put a bitmap pointer into this class
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">class</span> skyGUIEditBox <span class="k2">:</span> <span class="k1">public</span> skyGUIObject<span class="k2">{</span>
<span class="number">  2</span>public:
<span class="number">  3</span>  skyGUIEditBox<span class="k2">(</span><span class="k1">int</span> _id,<span class="k1">int</span> _w,<span class="k1">int</span> _h,<span class="k1">float</span> _x,<span class="k1">float</span> _y,<a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k3">*</span> _fnt,<a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span> _dispaly<span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>  ~skyGUIEditBox<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>  <span class="k1">void</span>                SetText<span class="k2">(</span><span class="k1">const</span> <span class="k1">wchar_t</span><span class="k3">*</span> _text<span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>  <span class="k1">const</span> <span class="k1">wchar_t</span><span class="k3">*</span>        GetText<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> 
<span class="number">  7</span>
<span class="number">  8</span>  <span class="k1">void</span>                Focus<span class="k2">(</span><span class="k1">bool</span> bFocused<span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>   <span class="k1">void</span> Render<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>   <span class="k1">void</span> Update<span class="k2">(</span><span class="k1">double</span> dt,<a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> <span class="k3">*</span> _event<span class="k3">=</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>private:
<span class="number"> 12</span>  <span class="k1">void</span>      OnKey<span class="k2">(</span> UINT nKey, UINT nRepCnt, UINT nFlags <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 13</span>  <span class="k1">void</span>      OnChar<span class="k2">(</span> UINT nChar, UINT nRepCnt, UINT nFlags <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 14</span>  <span class="k1">void</span>      InsertChar<span class="k2">(</span><span class="k1">wchar_t</span> aChar<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>  <span class="k1">void</span>      DeleteChar<span class="k2">(</span>TDP aPos<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>  <span class="k1">void</span>      ClearCookie<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>  
<span class="number"> 18</span>private:
<span class="number"> 19</span>  <span class="k1">int</span> m_wdith<span class="k2">;</span>
<span class="number"> 20</span>  <span class="k1">int</span> m_height<span class="k2">;</span>
<span class="number"> 21</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k3">*</span>m_fnt<span class="k2">;</span>
<span class="number"> 22</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_USTR"><span class="a">ALLEGRO_USTR</span></a>  <span class="k3">*</span>m_str<span class="k2">;</span>
<span class="number"> 23</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>m_bg<span class="k2">;</span>   <span class="c">//I put a bitmap pointer into this class</span>
<span class="number"> 24</span>  <span class="k1">wchar_t</span> m_textbuff<span class="k2">[</span><span class="n">1024</span><span class="k2">]</span><span class="k2">;</span>
<span class="number"> 25</span>  UINT m_charpos<span class="k2">;</span>
<span class="number"> 26</span>  <span class="k1">bool</span> m_posI<span class="k2">;</span>
<span class="number"> 27</span>  <span class="k1">bool</span> m_gposI<span class="k2">;</span>
<span class="number"> 28</span>  <span class="k1">static</span> LRESULT CALLBACK SkyEditWndProc<span class="k2">(</span>HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span><span class="k2">}</span><span class="k2">;</span>
</div></div><p>
Then, in the constructor to initialize it
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span>skyGUIEditBox::skyGUIEditBox<span class="k2">(</span><span class="k1">int</span> _id,<span class="k1">int</span> _w,<span class="k1">int</span> _h,<span class="k1">float</span> _x,<span class="k1">float</span> _y,<a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a> <span class="k3">*</span> _fnt,<a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span> _dispaly<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>
<span class="number">  4</span>  id<span class="k3">=</span>_id<span class="k2">;</span>
<span class="number">  5</span>
<span class="number">  6</span>  bStatic<span class="k3">=</span><span class="k1">false</span><span class="k2">;</span>
<span class="number">  7</span>  m_wdith<span class="k3">=</span>_w<span class="k2">;</span>
<span class="number">  8</span>  m_height<span class="k3">=</span>_h<span class="k2">;</span>
<span class="number">  9</span>  bVisible<span class="k3">=</span><span class="k1">true</span><span class="k2">;</span>
<span class="number"> 10</span>  bEnabled<span class="k3">=</span><span class="k1">true</span><span class="k2">;</span>
<span class="number"> 11</span>  rect.Set<span class="k2">(</span>_x, _y, _x<span class="k3">+</span>_w, _y<span class="k3">+</span>_h<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>  m_fnt<span class="k3">=</span>_fnt<span class="k2">;</span>
<span class="number"> 13</span>  m_charpos<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
<span class="number"> 14</span>  m_gposI<span class="k3">=</span><span class="k1">false</span><span class="k2">;</span>
<span class="number"> 15</span>  HWND hWnd <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_win_window_handle"><span class="a">al_get_win_window_handle</span></a><span class="k2">(</span>_dispaly<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span>  <span class="k1">if</span> <span class="k2">(</span>g_LastWndProc <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span>
<span class="number"> 18</span>  <span class="k2">{</span>
<span class="number"> 19</span>    g_LastWndProc <span class="k3">=</span> <span class="k2">(</span>WNDPROC<span class="k2">)</span><span class="k2">:</span><span class="k2">:</span>GetWindowLong<span class="k2">(</span>hWnd,GWL_WNDPROC<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 20</span>    <span class="k1">if</span><span class="k2">(</span>g_LastWndProc <span class="k3">!</span><span class="k3">=</span> <span class="k2">(</span>WNDPROC<span class="k2">)</span><span class="k2">:</span><span class="k2">:</span>SetWindowLong<span class="k2">(</span>hWnd,GWL_WNDPROC,<span class="k2">(</span>LONG<span class="k2">)</span>SkyEditWndProc<span class="k2">)</span><span class="k2">)</span><span class="k1">throw</span> NULL<span class="k2">;</span>
<span class="number"> 21</span>  <span class="k2">}</span>
<span class="number"> 22</span>  ClearCookie<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 23</span>  m_str<span class="k3">=</span><a href="http://www.allegro.cc/manual/al_ustr_new_from_utf16"><span class="a">al_ustr_new_from_utf16</span></a><span class="k2">(</span><span class="k2">(</span><span class="k1">uint16_t</span><span class="k3">*</span><span class="k2">)</span>m_textbuff<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span><span class="c">///////////////////////Here/////////////////////////////////////</span>
<span class="number"> 25</span>  m_bg<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>
<span class="number"> 26</span>  m_bg<span class="k3">=</span><a href="http://www.allegro.cc/manual/al_create_bitmap"><span class="a">al_create_bitmap</span></a><span class="k2">(</span>_w,_h<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>m_bg<span class="k2">)</span><span class="k1">throw</span> NULL<span class="k2">;</span>
<span class="number"> 28</span><span class="c">////////////////////////////////////////////////////////////////</span>
<span class="number"> 29</span><span class="k2">}</span>
</div></div><p>

use it in following function
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">void</span> skyGUIEditBox::Render<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span>
<span class="number">  2</span>  
<span class="number">  3</span>  <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>m_bg<span class="k2">)</span><span class="k2">;</span>
<span class="number">  4</span>  <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgba"><span class="a">al_map_rgba</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  5</span>  <a href="http://www.allegro.cc/manual/al_draw_ustr"><span class="a">al_draw_ustr</span></a><span class="k2">(</span>m_fnt,color,<span class="n">1</span>,<span class="n">1</span>,<span class="n">0</span>,m_str<span class="k2">)</span><span class="k2">;</span>
<span class="number">  6</span>  <a href="http://www.allegro.cc/manual/al_draw_rectangle"><span class="a">al_draw_rectangle</span></a><span class="k2">(</span><span class="n">0</span>,<span class="n">0</span>,m_wdith,m_height,color,<span class="n">1</span>.<span class="n">0f</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>  <span class="k1">if</span><span class="k2">(</span>m_posI <span class="k3">&amp;</span><span class="k3">&amp;</span> m_gposI<span class="k2">)</span><span class="k2">{</span>
<span class="number">  8</span>    <span class="k1">int</span> f_height<span class="k3">=</span><a href="http://www.allegro.cc/manual/al_get_font_line_height"><span class="a">al_get_font_line_height</span></a><span class="k2">(</span>m_fnt<span class="k2">)</span><span class="k3">-</span><span class="n">4</span><span class="k2">;</span>
<span class="number">  9</span>    <span class="k1">int</span> t_width <span class="k3">=</span><a href="http://www.allegro.cc/manual/al_get_ustr_width"><span class="a">al_get_ustr_width</span></a><span class="k2">(</span>m_fnt,m_str<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>    <span class="k1">int</span> x1<span class="k3">=</span>t_width<span class="k3">+</span><span class="n">1</span><span class="k2">;</span>
<span class="number"> 11</span>    <span class="k1">int</span> y1<span class="k3">=</span><span class="n">2</span><span class="k2">;</span>
<span class="number"> 12</span>    <span class="k1">int</span> x2<span class="k3">=</span>x1<span class="k2">;</span>
<span class="number"> 13</span>    <span class="k1">int</span> y2<span class="k3">=</span>y1<span class="k3">+</span>f_height<span class="k2">;</span>
<span class="number"> 14</span>    <a href="http://www.allegro.cc/manual/al_draw_line"><span class="a">al_draw_line</span></a><span class="k2">(</span>x1,y1,x2,y2,color,<span class="n">1</span>.<span class="n">0f</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>  <span class="k2">}</span>
<span class="number"> 16</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>dis<span class="k3">=</span><a href="http://www.allegro.cc/manual/al_get_current_display"><span class="a">al_get_current_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>  <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_get_backbuffer"><span class="a">al_get_backbuffer</span></a><span class="k2">(</span>dis<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>  <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>m_bg,rect.x1,rect.y1,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span><span class="k2">}</span>
</div></div><p>

but,when i destory it in destructor function,
</p><div class="source-code snippet"><div class="inner"><pre>skyGUIEditBox::~skyGUIEditBox<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span>
  <span class="k1">if</span><span class="k2">(</span>m_bg<span class="k2">)</span><span class="k2">{</span>
  <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>m_bg<span class="k2">)</span><span class="k2">;</span>
  <span class="k2">}</span>
  ClearCookie<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
  m_fnt<span class="k3">=</span><span class="n">0</span><span class="k2">;</span>  
<span class="k2">}</span>
</pre></div></div><p>

The following error occurred:</p><p>&quot;Unhandled exception: 0xC0000005: read location 0x00000000 when an access violation occurs in the 0x645c4b16  at 地图编辑器.exe &quot;</p><p><img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" /><img src="http://www.allegro.cc/forums/smileys/huh.gif" alt="???" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Quanwei Yuan)</author>
		<pubDate>Fri, 14 Dec 2012 11:57:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That&#39;s easy. The reason this is happening is because it&#39;s destroying the bitmap after allegro has killed itself. At least that&#39;s what I think is happening. Something is making those bitmap pointers invalid.</p><p>I had this happen when I was first starting out too. My solution evolved to &quot;KillAllegro()&quot; and to careful destruction of the bitmaps so they precede the end of main().</p><p>Basically, do not destroy bitmaps in the destructor of a class. Ideally, create all your images through the same routine and store a list of pointers to them. When the application terminates, destroy them one by one.</p><p>Something (hacked together some code for you):
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#include &lt;list&gt;</span>
<span class="number">  2</span>
<span class="number">  3</span><span class="k1">typedef</span> std::list<span class="k3">&lt;</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span><span class="k3">&gt;</span> t_imglist<span class="k2">;</span>
<span class="number">  4</span>
<span class="number">  5</span><span class="k1">class</span> myimages <span class="k2">{</span>
<span class="number">  6</span>public:
<span class="number">  7</span>  myimages<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span><span class="k2">}</span>
<span class="number">  8</span>  ~myimages<span class="k2">(</span><span class="k2">)</span><span class="k2">{</span><span class="k2">}</span>
<span class="number">  9</span>
<span class="number"> 10</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span> loadbitmap<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>path<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>  <span class="k1">void</span> killbitmaps<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>private:
<span class="number"> 13</span>  std::list<span class="k3">&lt;</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span><span class="k3">&gt;</span> m_img<span class="k2">;</span>
<span class="number"> 14</span><span class="k2">}</span>
<span class="number"> 15</span>
<span class="number"> 16</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span> myimages::loadbitmap<span class="k2">(</span><span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>path<span class="k2">)</span>
<span class="number"> 17</span><span class="k2">{</span>
<span class="number"> 18</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span> pbm<span class="k3">=</span>NULL<span class="k2">;</span>
<span class="number"> 19</span>  <span class="k1">if</span><span class="k2">(</span> <span class="k3">!</span><span class="k2">(</span>pbm <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span>path<span class="k2">)</span><span class="k2">)</span> <span class="k2">)</span> <span class="k2">{</span> 
<span class="number"> 20</span>    <span class="c">// if you have log file then log it</span>
<span class="number"> 21</span>    <span class="k1">return</span> NULL<span class="k2">;</span>
<span class="number"> 22</span>  <span class="k2">}</span>
<span class="number"> 23</span>  <span class="c">// add the bitmap pointer to the list</span>
<span class="number"> 24</span>  m_img.push_back<span class="k2">(</span>pbm<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>  
<span class="number"> 26</span>  <span class="k1">return</span> pbm<span class="k2">;</span>
<span class="number"> 27</span><span class="k2">}</span>
<span class="number"> 28</span>
<span class="number"> 29</span><span class="k1">void</span> myimages::killbitmaps<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 30</span><span class="k2">{</span>
<span class="number"> 31</span>  t_imglist::iterator pend <span class="k3">=</span> m_img.end<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>  <span class="k1">for</span><span class="k2">(</span>t_imglist::iterator p1<span class="k3">=</span>m_img.begin<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span> p1 <span class="k3">!</span><span class="k3">=</span> pend<span class="k2">;</span> <span class="k3">+</span><span class="k3">+</span>p1<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 33</span>    <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span><span class="k3">*</span>p1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 34</span>  <span class="k2">}</span>
<span class="number"> 35</span>  
<span class="number"> 36</span>  m_img.clear<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span><span class="k2">}</span>
</div></div><p>
If I read what you wrote wrong, I&#39;m sorry. I have to go to bed now. <img src="http://www.allegro.cc/forums/smileys/cheesy.gif" alt=";D" border="0" />.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (fallenlight12)</author>
		<pubDate>Fri, 14 Dec 2012 13:34:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I find it&#39;s generally not a good idea to put stuff related to Allegro into pointer destructors, since if Allegro shuts down before such a struct/class is destroyed then any calls to most Allegro functions will cause crashes.</p><p>When it comes to bitmaps, what I like to do is load all of my bitmaps into global pointer arrays, then simply copy those pointers into my class/struct objects. When I shut down my program I simply destroy the bitmaps in their global arrays before closing out Allegro, thus meaning I can just completely ignore the outdated pointers in my class/struct objects.</p><p>If you absolutely must load your bitmaps directly into your objects, (which is still a bad idea for other reasons, such as being a waste of memory if multiple objects load up identical bitmaps, or being difficult to reload if display conditions change), then what you can do is make sure all such objects are declared explicitly:</p><p><span class="source-code">skyGUIEditBox <span class="k3">*</span>SGUIEB <span class="k3">=</span> <span class="k1">new</span> skyGUIEditBox<span class="k2">;</span></span></p><p>Then, BEFORE you shut down Allegro at the end of your program:</p><p><span class="source-code"><span class="k1">delete</span> SGUIEB<span class="k2">;</span></span></p><p>Ideally though, you should load your bitmaps separate from your objects into a global array and simply copy the existing bitmap pointers into your objects. It&#39;ll save you a lot of trouble in the long run.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kris Asick)</author>
		<pubDate>Fri, 14 Dec 2012 17:23:50 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thank you fo your answer.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Quanwei Yuan)</author>
		<pubDate>Sat, 15 Dec 2012 07:46:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I had the same problem recently.<br />Instead of destroying the bitmaps in a destructor, I simply made a function which I called right before return 0; in main.</p><p>Something like fallelight12 wrote, but simpler:
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="k1">class</span> CData
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>private:
<span class="number">  4</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a><span class="k3">*</span> image<span class="k2">[</span>IMG_AMT<span class="k2">]</span><span class="k2">;</span>
<span class="number">  5</span>    ...
<span class="number">  6</span>    
<span class="number">  7</span>public:
<span class="number">  8</span>    ...
<span class="number">  9</span>    <span class="k1">bool</span> loadImages<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span>    <span class="k1">void</span> destroyImages<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span><span class="k2">}</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span><span class="k1">bool</span> CData::loadImages<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 14</span><span class="k2">{</span>
<span class="number"> 15</span>    image<span class="k2">[</span><span class="n">0</span><span class="k2">]</span> <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span> <span class="s">"data\\gfx\\image1.png"</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>    ...
<span class="number"> 17</span><span class="k2">}</span>
<span class="number"> 18</span>
<span class="number"> 19</span><span class="k1">void</span> CData::destroyImages<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 20</span><span class="k2">{</span>
<span class="number"> 21</span>    <span class="k1">for</span> <span class="k2">(</span> <span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> IMG_AMT<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span> <span class="k2">)</span>
<span class="number"> 22</span>    <span class="k2">{</span>
<span class="number"> 23</span>        <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span> image<span class="k2">[</span>i<span class="k2">]</span> <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 24</span>    <span class="k2">}</span>
<span class="number"> 25</span><span class="k2">}</span>
<span class="number"> 26</span>
<span class="number"> 27</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 28</span><span class="k2">{</span>
<span class="number"> 29</span>    initialize etc.
<span class="number"> 30</span>    data.loadImages<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>
<span class="number"> 32</span>    game loop
<span class="number"> 33</span>    ...
<span class="number"> 34</span>
<span class="number"> 35</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a> game loop
<span class="number"> 36</span>    
<span class="number"> 37</span>    data.destroyImages<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 38</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 39</span><span class="k2">}</span>
</div></div><p>
Not a perfect example, but you get the idea <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Joachim Arting)</author>
		<pubDate>Sat, 15 Dec 2012 20:14:20 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think it would be best to wrap Allegro in a C++ class to make it work better with automatic destruction. You could use unique_ptr, but I think a real wrapper may work better.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Itachihro)</author>
		<pubDate>Sat, 15 Dec 2012 21:05:30 +0000</pubDate>
	</item>
</rss>
