Path: utzoo!utgpu!news-server.csri.toronto.edu!bonnie.concordia.ca!uunet!samsung!rex!uflorida!reef.cis.ufl.edu!jdb From: jdb@reef.cis.ufl.edu (Brian K. W. Hook) Newsgroups: comp.lang.c Subject: Re: Memory Allocation Problem Message-ID: <26447@uflorida.cis.ufl.EDU> Date: 23 Jan 91 14:04:33 GMT References: <7156@crash.cts.com> Sender: news@uflorida.cis.ufl.EDU Organization: UF CIS Dept. Lines: 51 In article <7156@crash.cts.com> kevin@crash.cts.com (Kevin Hill) writes: > > I am still having problems with the malloc use in allocating memory >for a two dimensional array. I thank everyone that has been attempting >to help me with this. I don't know exactly what system you are writing on, but I assume that it is PC compatible. Actually, some code looks like Mac, but either way it is not very relevant. Have you tried using a SINGLE pointer instead of two? Or are you doing something that I am not aware of. For example, I wrote a windowing library that looks much like some of that code you are using (which actually looks quite a lot like the MetaWINDOWS library). typedef struct _window { int width, height; BYTE *oldImage; ... } WINDOW; While it is more intuitive to declare an array of pointers for a rectangular region I have found that the following works REAL well and adds some simplicity. void createWin ( WINDOW *wnd /* Whatever else needs to be passed */ ) { ... wnd->oldImage=(BYTE *)(malloc(wnd->width*wnd->height)+1); // I add 1 // just in case ... } This assumes that the WINDOW doesn't cast a shadow and that the area behind is definable as a BYTE (8 bits, as far as I am concerned...a 256 color bit map) for each discreate location behind the WINDOW (i.e. pixel). Now, back to the two dimensional array. How about indicing each pointer that you need using a little bit of pointer arithmetic. The equation should be: BYTE *rowToFind=wnd->oldImage+(wnd->width*row+column); This assumes that "row" and "column" is the starting pixel for the address you wish to find. Since you are looking for a pointer per row (thus simulating a two dimensional array) "column" would be 0. Then you would just grab wnd->width amount of BYTEs to get that entire line. Hope this helped, Brian