Ragazzi ho cominciato a implementare un lista concatenata e ho un problema: cerco di allocare uno struct che contiene due puntatori a carattere(stringhe) e... una volta allocata la seconda stringa, la prima viene compromessa e non riesco a capire perché! Ecco le inizializzazioni per la lista:
struct variabile {
char *nome;
char *valore;
char tipo;
struct variabile *prox;
};
typedef struct variabile listaVar;
listaVar *ricerca, *testa;
Ed ecco la routine che usa la lista concatenata, per ora è in grado di scrivere solo la testa della lista. Prende in ingresso una stringa precedentemente processata con la funzione "strtok":
void creaVar(char *inp) {
int i;
if(testa == NULL) {
ricerca = (listaVar*)malloc(sizeof(listaVar));
ricerca -> nome = (char*)malloc(sizeof());
strcpy(ricerca -> nome, inp);
Serial.print("nomeV: ");
Serial.println(ricerca -> nome);
for(; *inp != '\0';) {
inp ++;
}
inp ++;
ricerca -> valore = (char*)malloc(sizeof(strlen(inp)));
strcpy(ricerca -> valore, inp);
Serial.print("Val.V: ");
Serial.println(ricerca -> valore);
ricerca -> tipo = 'n';
for(i = 0; i < strlen(ricerca -> valore); i ++) {
if(*(ricerca -> valore) < 48 || *(ricerca -> valore) > 57) {
ricerca -> tipo = 's';
break;
}
}
ricerca -> prox = NULL;
testa = ricerca;
}
}
Ok, la funzione va alla grande, ma se ad esempio do in ingresso una stringa del tipo "nome\0valore\0", la stringa "nome" viene correttamente memorizzata ma quando vado a memorizzare la stringa "valore" la stringa precedente viene compromessa, da "blabla" diventa "b\0", oppure da "ciao" diventa "c\0".
Lo stesso identico codice implementato per PC (sostituendo Serial.print con printf...) funziona perfettamente e sull'Arduino il problema si risolve usando una allocazione fissa per il campo "nome", ma è una cosa che vorrei veramente evitare visto che porta un gran spreco di memoria.
Spero possiate aiutarmi a capire cosa non va.
Grazie, ciao