Malloc in D

Marcin m_zap at o2.pl
Fri Apr 27 02:05:08 PDT 2012


Hi!
I find code:
[code]
import c.stdlib;
import c.stdlib;
import std.outofmemory;

class Foo{
	static void[] buffer;
	static int bufindex;
	static const int bufsize = 100;
	static this(){
		void *p;
		p = malloc(bufsize);
		if (!p)
		throw new OutOfMemory;
		gc.addRange(p, p + bufsize);
		buffer = p[0 .. bufsize];
	}
	static ~this(){
		if (buffer.length){
			gc.removeRange(buffer);
			free(buffer);
			buffer = null;
		}
	}
	new(uint sz){
		void *p;
		p = &buffer[bufindex];
		bufindex += sz;
		if (bufindex > buffer.length)
		throw new OutOfMemory;
		return p;
	}
	delete(void* p){
		assert(0);
	}
	static int mark(){
		return bufindex;
	}

	static void release(int i){
		bufindex = i;
	}
}
void test(){
	int m = Foo.mark();
	Foo f1 = new Foo; // allocate
	Foo f2 = new Foo; // allocate
	Foo.release(m); // deallocate f1 and f2
}
[/code]
When I try compile i have some error:[code]
vander at vander-VirtualBox:~/Pulpit/D$ gdc Memory.d -o Memory
Memory.d:1: Error: module stdlib is in file 'c/stdlib.d' which 
cannot be read
import path[0] = 
/usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.4.5/../../../../../include/d/4.4.5/i686-linux-gnu
import path[1] = 
/usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.4.5/../../../../../include/d/4.4.5
vander at vander-VirtualBox:~/Pulpit/D$[/code]
When i comment import c.stdlib;
I have error
[code]
vander at vander-VirtualBox:~/Pulpit/D$ gdc Memory.d -o Memory
Memory.d:11: Error: undefined identifier malloc
Memory.d:11: Error: function expected before (), not __error of 
type _error_
Memory.d:13: Error: identifier 'OutOfMemory' is not defined
Memory.d:13: Error: OutOfMemory is used as a type
Memory.d:13: Error: new can only create structs, dynamic arrays 
or class objects, not void's
Memory.d:13: Error: can only throw class objects, not type void*
Memory.d:14: Error: undefined identifier gc, did you mean static 
import gcc?
Error: no property 'addRange' for type 'TOK149'
Memory.d:14: Error: function expected before (), not __error of 
type TOK149
Memory.d:19: Error: undefined identifier gc, did you mean static 
import gcc?
Error: no property 'removeRange' for type 'TOK149'
Memory.d:19: Error: function expected before (), not __error of 
type TOK149
Memory.d:20: Error: undefined identifier free, did you mean 
function fread?
Memory.d:20: Error: function expected before (), not __error of 
type _error_
Memory.d:29: Error: identifier 'OutOfMemory' is not defined
Memory.d:29: Error: OutOfMemory is used as a type
Memory.d:29: Error: new can only create structs, dynamic arrays 
or class objects, not void's
Memory.d:29: Error: can only throw class objects, not type void*
vander at vander-VirtualBox:~/Pulpit/D$
[/code]
What's can be wrong?


More information about the Digitalmars-d-learn mailing list