RE: [Linux-programlama] alloca?

---------

New Message Reply About this list Date view Thread view Subject view Author view Attachment view

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


New Message Reply About this list Date view Thread view Subject view Author view Attachment view

---------

Bu arsiv hypermail 2.1.2 tarafindan uretilmistir.