strcat - C++ - Programmation
Marsh Posté le 28-03-2012 à 11:15:31
Et vous avez même du pot que ça plante pas direct!
Vu que file = "/mnt/disque/audio" il est ou l'espace alloué pour les caractères que vous rajoutez à file avec strcat?
A+,
Marsh Posté le 28-03-2012 à 12:21:19
Tu cherche a obtenir quoi d'abord comme résultat?
/mnt/disque/audio_ch1.wav
/mnt/disque/audio_ch2.wav
Tu obtiens ça
/mnt/disque/audio_ch1.wav
/mnt/disque/audio_ch1.wav_ch2.wav
car ton file1 et ton file2 sont des pointeurs sur ton file, du coup que tu modifie file1 ou file2 au final tu modifie file !
Marsh Posté le 28-03-2012 à 12:21:21
Code :
|
Parce que là, tu fais pointer file1 sur ta chaîne file, donc ton strcat ajoutera directement à la fin de file "ch1.wav", ensuite "ch2.wav" (vu que ch2 pointe aussi sur ta chaîne file)
edit : Rah, grillé de 3secs
Marsh Posté le 28-03-2012 à 14:01:48
j'ai essayé avec les malloc, mais le résultat est toujours le meme
Marsh Posté le 28-03-2012 à 15:25:50
Donc fais voir tout ton code, et pas seulement un bout insuffisant qui ne permet pas de diagnostiquer le pb.
Parce que ce qu'a posté Terminapor est un code 100% correct.
A+,
Marsh Posté le 29-03-2012 à 12:11:16
par contre j'ai un problème d'allocation mémoire :
*** glibc detected *** munmap_chunk(): invalid pointer: 0x087110f0 ***
Marsh Posté le 29-03-2012 à 12:13:20
C'est sur que sans poster ton code, grâce a nos boules de cristal suractivées, on va tout de suite en deviner la cause
A+,
Marsh Posté le 29-03-2012 à 12:26:27
ReplyMarsh Posté le 29-03-2012 à 12:29:31
Non attends, l'adresse 0x087110F0 c'est un début de tableau de structure, celle-ci qui contient un int comme référence, un std::string pour un nom et et... ah, un pointeur pour l'élément suivant.
Sinon, sérieusement, t'as bien fait attention à initialiser tout tes pointeurs à NULL (0) ? Fais-le si tu l'a fait, comme ça s'il te dit adresse invalid at 0, c'est que t'accède à un pointeur non-initialisé. Sinon, ptet un free() mal placé, faut toujours pensé que un pointeur qui pointe sur rien -> on le met à 0
Après on peut pas dire sans voir ton code
Marsh Posté le 29-03-2012 à 12:32:47
lebron54 a écrit : j'ai posté l'eesentiel |
Non, parce que typiquement, c'est un message causé par une libération mémoire mal faite, et sans le code, comment veux tu qu'on sache comment c'est mal libéré et ou...
A+,
Marsh Posté le 28-03-2012 à 11:08:45
bonjour,
je cherche à faire deux strcat consécutifs, mais j'ai un petit problème
file = "/mnt/disque/audio"
void fonction (char *file)
{
char *file1;
char *file2;
file1 = file;
file2 = file;
strcat(file1, "ch1.wav" );
strcat(file2, "ch2.wav" );
printf("%s\n", file1);
printf("%s\n", file2);
}
et j'obtient :
/mnt/disque/audio_ch1.wav
/mnt/disque/audio_ch1.wav_ch2.wav