www.digitalmars.com         C & C++   DMDScript  

D - Bug in Outbuffer?

reply Friedrich Dominicus <frido q-software-solutions.com> writes:
I copied the code from outbuffer.d to a new file. It looks like this:
import outbuffer;
int main(){
     OutBuffer buf = new OutBuffer();

     //printf("buf = %p\n", buf);
     //printf("buf.offset = %x\n", buf.offset);
     assert(buf.offset == 0);
     buf.write("hello");
     buf.write(cast(byte)0x20);
     buf.write("world");
     buf.printf(" %d", 6);
     // printf("buf = '%.*s'\n", buf.toString());
     return 0;
}

If I run this code I code crash with this backtrace:
(gdb) run
Starting program: /home/frido/Arbeit/LM/D/src/bug_1
(no debugging symbols found)...[New Thread 16384 (LWP 5652)]
(no debugging symbols found)...
(no debugging symbols found)...(no debugging symbols found)...
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 16384 (LWP 5652)]
0x08049c3b in _D9outbuffer9OutBuffer6spreadFkkZv ()
(gdb) backtrace
#0  0x08049c3b in _D9outbuffer9OutBuffer6spreadFkkZv ()
#1  0x08048ffb in _Dmain ()
#2  0x080494c4 in main ()
#3  0x400abd04 in __libc_start_main () from /lib/libc.so.6


I do not think that this should happen.

I'm running DMD 0.69 on a Debian/unstable box Libc version 2.3.x


Another point. I wrote about a generic way for printing objects. Now it 
seems Outbuffer is the answer, unfortunatly there's not function for 
printing an Object. I wonder if this patch would work:
     void write(Object o){
         reserve(o.toString().size);
         write(o.toString());
}

Regards
Friedrich
Aug 20 2003
parent reply "Walter" <walter digitalmars.com> writes:
Try deleting lines of code from it until the problem goes away, that way at
least it's down to which line is the problem.
Aug 21 2003
parent Friedrich Dominicus <frido q-software-solutions.com> writes:
Walter wrote:
 Try deleting lines of code from it until the problem goes away, that way at
 least it's down to which line is the problem.
 
 

This works: import outbuffer; int main(){ OutBuffer buf = new OutBuffer(); //printf("buf = %p\n", buf); //printf("buf.offset = %x\n", buf.offset); assert(buf.offset == 0); buf.write("hello"); buf.write(cast(byte)0x20); //buf.write("world"); // buf.printf(" %d", 6); printf("buf = '%.*s'\n", buf.toString()); return 0; } this crashes: import outbuffer; int main(){ OutBuffer buf = new OutBuffer(); //printf("buf = %p\n", buf); //printf("buf.offset = %x\n", buf.offset); assert(buf.offset == 0); buf.write("hello"); buf.write(cast(byte)0x20); //buf.write("world"); buf.printf(" %d", 6); printf("buf = '%.*s'\n", buf.toString()); return 0; } Regards Friedrich
Aug 24 2003