From: İsmet Sönmez (isonmez@bek.org.tr)
Date: Wed 12 Apr 2006 - 09:27:08 GMT
Merhaba,
b buffer'ını int olarak tanıttığım zaman problem çözüldü.
int i;
int size = (x2-x1+1) * (y2-y1+1);
int fill = (colour << 8) + ch;
word *buf = alloca (2*size);
int *b = alloca (size);------------->
Ben aslında c bilmiyorum.
Elimde küçük bir telnet programı var.
Onu embedded bir pc de lcd ekrana uyarlıyorum.
Sanırım artık oldu.
Bu yeni tanımlamanın bana zararı olurmu?
-----Original Message-----
From: linux-programlama-bounces@liste.linux.org.tr
[mailto:linux-programlama-bounces@liste.linux.org.tr] On Behalf Of Timur
Aydin
Sent: Tuesday, April 11, 2006 11:47 PM
To: linux-programlama@liste.linux.org.tr
Subject: Re: [Linux-programlama] alloca?
İsmet Sönmez <isonmez@bek.org.tr> writes:
> void SCR_Fill (int x1, int y1, int x2, int y2, int ch, int colour) {
> int i;
> int size = (x2-x1+1) * (y2-y1+1);
> int fill = (colour << 8) + ch;
> word *buf = alloca (2*size);
> word *b = alloca (size);
...
> buf[i] = fill;
> puttext (x1, y1, x2, y2, buf);
> }
> else
> {
> for (i = 0; i < size; i++)
> b[i] = ch;-------------------->O:rnegin bosluk basiriyorum.Ama bir
> bosluk bir NULL yapiyor. lcd_puttext (x1, y1, x2, y2, b);
> }
> }
>
Burada b buffer'inda tasma sozkonusu. i = size / 2'den itibaren b'nin
sinirini asip buf'i bozmaya basliyorsunuz.
b word olarak tanimlanmis, ama sadece "size" kadar yer alloc
ediyorsunuz. Ya bu "2*size" olacak, yada "char *b" olarak tanimlanacak
gibime geliyor. (Bu arada 2*size yerine alloca(size * sizeof(*buf))
daha genel ve hata yapma ihtimalini dusurur.)
-- Timur Aydin_______________________________________________ Linux-programlama mailing list Linux-programlama@liste.linux.org.tr http://liste.linux.org.tr/mailman/listinfo/linux-programlama