1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
long lId;
char *pszChaine;
} UneStruct;
#define CR_OK (short)0
#define CR_NOK (short)1
short libererMemoire (void **pvPointeur);
short allouerMemoire( void **pvPointeur, long lLongueur);
int foo2( long *plTab, short *psNb );
int main(int argc,char *argv[]){
char szChaineOrg[] = "Bonjour";
short sRetour = CR_OK;
// Ajout d'elements à un tableau dont on ne connait pas la taille
{
long *plTabLong = NULL;
short sNbElement = -1;
long sIndex = -1;
printf("sNbElement avant foo2(): %d\n", sNbElement);
foo2( plTabLong, &sNbElement );
printf("sNbElement apres foo2(): %d\n", sNbElement);
libererMemoire( &plTabLong );
}
return CR_OK;
}
int foo2( long *plTab, short *psNb ){
short sRetour = CR_OK;
short sNbElement = 15;
long lTabLong[sNbElement];
long sIndex = 0;
memset( lTabLong, '\0', sizeof(lTabLong) );
for (sIndex = 0; sIndex < sNbElement; sIndex++)
lTabLong[sIndex] = sIndex;
sRetour = allouerMemoire( &plTab, sizeof(lTabLong) );
if ( sRetour == CR_OK ){
memcpy( plTab, lTabLong, sizeof(lTabLong) );
(*psNb) = sNbElement;
}else{
}
return sRetour;
}
// Allocation de memoire dynamique
short allouerMemoire (void **pvPointeur, long lLongueur){
short sRetour = CR_OK;
/* traitement */
if (lLongueur > 0) {
lLongueur += sizeof (long);
*pvPointeur = (void *) malloc (lLongueur);
if (*pvPointeur == (void *) NULL) {
sRetour = 1;
}
else {
memset (*pvPointeur, '\0', lLongueur);
*pvPointeur = *( char** ) pvPointeur + sizeof( long );
}
}
else {
*pvPointeur = (void *) NULL;
sRetour = 1;
}
return (sRetour);
}
// Libération de mémoire dynamique
short libererMemoire (void **pvPointeur){
/* declarations des variables */
short sRetour = CR_OK;
/* traitement */
if (*pvPointeur != (void *) NULL) {
*pvPointeur = *( char** ) pvPointeur - sizeof( long );
free( *pvPointeur );
*pvPointeur = (void *)NULL;
}
return (sRetour);
} |
Partager