|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
[C] puntatori
Ciao.
In una funzione del genere: Codice:
void prova( int* pCount, BYTE*** pppTest)
{
int i;
BYTE **pP = NULL;
*pCount = 10;
pP = (BYTE **)malloc( *pCount * sizeof(BYTE *) );
if ( ! pP )
puts( "error allocating memory 1"), exit(1);
for (i = 0; i < *pCount; i++)
{
pP[i] = (BYTE *)malloc( 128 * sizeof(BYTE) );
if ( !pP[i] )
puts("error allocating memory 2"), exit(1);
memset( pP[i], 0, 128 * sizeof(BYTE) );
sprintf(pP[i], "this is a test <%03i>", i );
}
*pppTest = pP;
return 0;
}
Cioe´, perche´ devo dichiararmi un puntatore locale, allocare etc e poi alla fine assegnare l´indirizzo a quello passato e non usare direttamente il puntatore che trovo nell´indirizzo passato ? E´ un po´ di giorni che lavoro con triplette *** e mi son perso un attimo
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19148
|
Codice:
void prova(char ***ppp)
{
char **pp;
int i;
//pp = (char **) malloc(10 * sizeof(char *));
*ppp = (char **) malloc(10 * sizeof(char *));
for (i = 0; i < 10; i++)
{
(*ppp)[i] = malloc(4);
//pp[i] = malloc(4);
}
//*ppp = pp;
}
vedi però come è brutto da vedere? (*ppp)[i] non è bello, meglio un pp[i] insomma |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
![]() (*ppp)[i] lo scrivevo *ppp[i] penso che sia questo il problema perche´ non vedo altre differenze. grazie EDIT: no, le ho tolte al tuo esempio e funziona lo stesso. Chissa´cosa cacchio ho scritto ![]() EDIT2: riconfermo le parentesi, dal main non chiamavo la tua funzione ma sempre la mia. Ho tolto le parentesi dalla tua, la chiamo e crasha. Vabbe´ chiarito, grazie
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve Ultima modifica di trallallero : 15-05-2007 alle 13:03. |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
piccola domanda:
ma è lecito scrivere: Codice:
*pCount = 10
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
il prototipo e´ questo: Codice:
void prova( int* pCount, BYTE*** pppTest) La funzione chiamante passa quindi l´indirizzo della variabile dove la funzione chiamata andra´ a scrivere. se scrivi Codice:
pCount = 10 Se scrivi Codice:
*pCount = 10
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:24.






















