Vaughn018
Messages postés55Date d'inscriptionmardi 18 novembre 2003StatutMembreDernière intervention14 janvier 2005
-
18 déc. 2003 à 11:45
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
18 déc. 2003 à 15:07
Bonjour,
La mémoire ne peut etre 'written', un grand classique mais dans mon cas j'ai du mal à comprendre. Mieux vaut du code que des explications, alors trouvez l'erreur svp :
char * pt1,pt2,chaine;
char *Tabchaine[30];
// on suppose la variable chaine remplie sans erreurs.
pt1 = chaine;
pt2 = Tabchaine[i] // je vous épargne la boucle, d'ou
// la présence du 'i'.
// CE QUI POSE PROBLEME :
*pt1++ = *pt2++; // une copie de caractères toute bête non?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 18 déc. 2003 à 13:27
d = Tabchaine[0];
d pointe sur le 1er octet du 1er index, Tabchaine est un tableau de pointeurs.
*d = ... ok on affecte mais pas avec d=...
BruNews, ciao...
Vaughn018
Messages postés55Date d'inscriptionmardi 18 novembre 2003StatutMembreDernière intervention14 janvier 2005 18 déc. 2003 à 13:31
Meme raisonnement que pour jockos (et meme résultat aussi d'ailleurs!). (*d) est un char et Tabchaine est un tableau de char*...
Vaughn018, Siaïeï handler...
Vaughn018
Messages postés55Date d'inscriptionmardi 18 novembre 2003StatutMembreDernière intervention14 janvier 2005 18 déc. 2003 à 13:38
disons que j'ai juste alloué la mémoire à chaque Tabchaine (voir comment plus haut dans le roman-dialogue!) et ya encore rien dedans quand je fais l'affectation d = Tabchaine[0] ou d = Tabchaine[i] ensuite.
Vaughn018
Messages postés55Date d'inscriptionmardi 18 novembre 2003StatutMembreDernière intervention14 janvier 2005 18 déc. 2003 à 14:39
Ok mais si ça marche je vois pas où est mon problème... à part les *d = 0, moi je mets plutot *d = '\0' sinon tu as juste rajouté les tests sur *chaine pour etre sur que ça pointe sur quelque chose... je veux pas me répéter mais la chaine pointe bien sur qq choz lol
bon j'essaierai de me débrouiller, merci bcp de ce temps mis à ma disposition :)
Vaughn018, Siaïeï handler...
Vaughn018
Messages postés55Date d'inscriptionmardi 18 novembre 2003StatutMembreDernière intervention14 janvier 2005 18 déc. 2003 à 14:41
Je pense ne pas me tromper en disant que ça vient probablement de mon allocation mémoire. C'est la seule grosse différence avec ton programme qui a une mémoire fixe de 30 octets, lui.
Vérifie bien que l'allocation est correct en affichant simplement ton buffer :
printf("%s\n", Tabchaine[i]);
Pourquoi utiliser GlobalLock ??
Le problème vient de cette API windows...
"The GlobalLock function locks a global memory object and returns a pointer to the first byte of the object’s memory block. The memory block associated with a locked memory object cannot be moved or discarded."
Tu ne peux pas écrire dans ce buffer et c'est pour cela que l'instruction *d++ = *c++ plante.
Car d pointe sur la même zone mémoire que Tabchaine[0].
Et ce buffer est LOCK !
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 18 déc. 2003 à 15:07
GlobalLock j'avais pas vu ce truc, OBSOLETE !!!
Tout ce qui est Global... est obsolete.
HANDLE hheap = GetProcessHeap();
pointeur = HeapAlloc(hheap, 0, size) et c'est nickel.
HeapFree(hheap, 0, pointeur);
BruNews, ciao...