Malloc + 2d arrays + C
Giorgos Keramidas
keramida at ceid.upatras.gr
Tue Mar 19 14:53:01 EET 2002
On 2002-03-19 11:04, Ioannis Sidiropoulos wrote:
>
> Prospa8w na grapsw ena (to prwto mou) programma pou exei na kanei me
> images. Exw loipon mia synarthsh pou pairnei enan pointer se 2d
> array (to image) kai to epeksergazetai. Mesa s'ayth thn synarthsh kanw
> malloc gia enan temp 2d array wste na ginei olh h epksergasia s'ayton kai
> prin epistrepsw ap'thn synarthsh na ton kanw copy sto actual image (ksexasa
> na pw oti einai char arrays):
>
> void process(int size, char **image) {
> int arraySize = 2*size+1; //arraySize = to mhkos ths pleyras toy#
> // TETRAGWNOU array
Se C h se C++ grafeis? Ti einai to // ...?
H C den exei sxolia se C++ stul.
Giati kaneis ton `periergo' pollaplasiasmo me to 2 kai prostheteis 1?
To `size' einai telika, h den einai to megethos tou pinaka?
> char **tmp = malloc(arraySize*sizeof(char *));
>
> for (l;l<arraySize;l++) {
Duo lathi:
- undeclared variable `l'.
- uninitialized variable `l' used as a loop sentinel.
Ah, epishs. Grafeis me athlio stul.
Whitespace. Use whitespace. It's free and available in large quantities.
To parapano einai POLU pio euanagnosto an to grapseis san:
for (x = 0; x < arraySize; x++) {
...
}
> tmp[i] = malloc(arraySize*sizeof(char));
> }
Edo exeis kataferei kai ekanes allocate ena array megethous P x P,
opou P = 2 * size + 1. Akoma den katalabaino giati o periergos
pollaplasiasmos me to 2 kai to + 1, alla telospantwn.
> // edw ginetai to processing ston tmp
> // kai twra 8a ton kanw copy ston image
> // kai 8a eley8erwsw th mnhmh
>
> memmove (image, tmp, arraySize);
Oriste? Posa bytes einai auto?
Koita ti leei to manpage ths memmove() edo pera...
SYNOPSIS
#include <string.h>
void *
memmove(void *dst, const void *src, size_t len);
DESCRIPTION
The memmove() function copies len bytes from string src to
string dst. The two strings may overlap; the copy is always
done in a non-destructive manner.
Diabase prosektika... "The memmove() function copies len bytes".
Esena poios sou eipe oti ena array me X entries apo `char *' einai X bytes?
hades:~$ cat > sizeof.c
#include <stdio.h>
int main (void)
{
printf("%d\n", sizeof(char *));
return 0;
}
hades:~$ cc -Wall sizeof.c
hades:~$ ./a.out
4
> free(tmp);
Kalh fash. Ekanes free ton `tmp' pinaka, opote kapoios mporei na parei th
mnhmh pou palia htan o `tmp' sto akribos epomeno malloc(), efoson einai
pleon free memory :) Mono pou ksexases pos den ekanes mono:
tmp = malloc(...);
alla ekanes kai ena malloc() gia KATHE stoixeio tou tmp array. Pisteuo pos
mallon tha exeis ena mikro memory leak.
> }
>
> Parolo pou kanei compile to programma me petaei Segm. Fault
> otan to trexw, ti exw kanei la8os???
Xoris na doume olo to programma? Sobarologeis tora?
Ki ego pou ksero ti sto gero-diaolo kaneis ekei pou egrapses:
> // edw ginetai to processing ston tmp
> // kai twra 8a ton kanw copy ston image
> // kai 8a eley8erwsw th mnhmh
Show us the code, darling. All of it...
Giorgos Keramidas FreeBSD Documentation Project
keramida@{freebsd.org,ceid.upatras.gr} http://www.FreeBSD.org/docproj/
More information about the Linux-greek-users
mailing list