PDA

View Full Version : [C] Errore lettura puntatore


Njk00
27-01-2010, 13:27
Salve
volevo chiedere come mai questo codice non funziona:

#include <stdio.h>
#include <stdlib.h>

void test(int*);

int a = 7;

int main(int argc, char** queen_position)
{

int* p;

test(p);

printf("%d\n", *p);

return 0;
}

void test(int* p)
{
p = malloc(sizeof(int));
*p = a;
}


Precisazione: nessun errore o warning in compilazione, ma la stampa di p da un valore errato. La memoria allocata nella funzione sembra che venga corrotta al momento della chiusura di essa, ma tutto ciò non dovrebbe accadere, probabilmente il problema è un altro che non riesco a capire.

Grazie a tutti per l'aiuto.

Ilbaama
27-01-2010, 17:09
#include <stdio.h>
#include <stdlib.h>

void test(int * &);

int a = 7;

int main(int argc, char** queen_position)
{

int* p;

test(p);

printf("%d\n", *p);

return 0;
}

void test( int * & p)
{
p = (int*) malloc(sizeof(int));
*p = a;
printf("%d\n", *p); // per verifica
}

La parte in giallo è per la compatibilità con il C++ (senza di essa Code:Blocks non me lo accettava :stordita:).

Se provi il tuo codice con la riga dove c'è //per verifica vedi che ottieni il risultato che volevi e cioè il valore di a.
Il problema è che senza "&" nella funzione test() viene eseguita una copia di p e non agisce su p passato nel main().
Nota: p che usi nel main() è diverso da p usato nella dichiarazione della funzione.

Njk00
29-01-2010, 09:30
Grazie mille per la soluzione.