Memory errors

2014-03-16 Thread PhilE
When using both simpleimage and DWT my program crashes with 
core.exception.InvalidMemoryOperationError after I show an 
image in a GUI window and then close the window. I'm presumably 
misunderstanding something about how the windows deal with memory 
deallocation, but this happens even when copying tutorial 
examples.


e.g.

module main;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.graphics.all;

void main ()
{
auto display = new Display;
auto shell = new Shell;

shell.setText(Title);

Label label = new Label (shell, SWT.BORDER);
label.setBounds(shell.getClientArea());

Image image = new Image(display, C:/dev/data/tree.png);
label.setImage(image);

shell.pack();
shell.open();

while (!shell.isDisposed)
if (!display.readAndDispatch())
display.sleep();

display.dispose();
}

This successfully creates the display and shows an image, but 
when I close the window the memory error exception is thrown. If 
I run the same code without creating the image then there's no 
errors. If I create the image without setting it on the label I 
still get the error. Any ideas?


Re: Memory errors

2014-03-16 Thread PhilE
Ah, I need to dispose of the image before disposing of the 
display.


On Sunday, 16 March 2014 at 19:33:09 UTC, PhilE wrote:
When using both simpleimage and DWT my program crashes with 
core.exception.InvalidMemoryOperationError after I show an 
image in a GUI window and then close the window. I'm presumably 
misunderstanding something about how the windows deal with 
memory deallocation, but this happens even when copying 
tutorial examples.


e.g.

module main;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.graphics.all;

void main ()
{
auto display = new Display;
auto shell = new Shell;

shell.setText(Title);

Label label = new Label (shell, SWT.BORDER);
label.setBounds(shell.getClientArea());

Image image = new Image(display, C:/dev/data/tree.png);
label.setImage(image);

shell.pack();
shell.open();

while (!shell.isDisposed)
if (!display.readAndDispatch())
display.sleep();

display.dispose();
}

This successfully creates the display and shows an image, but 
when I close the window the memory error exception is thrown. 
If I run the same code without creating the image then there's 
no errors. If I create the image without setting it on the 
label I still get the error. Any ideas?