Je viens de convertir une bibliothèque Objective-C en une bibliothèque C dans l'espoir de la rendre multi-plateforme. Cependant, tout semble bien se passer jusqu'à ce que j'envoie cette chose pour être traitée.La chaîne mallocée contient des valeurs parasites
C'est au moment où j'obtiens une erreur.
En repensant à quelques révisions, j'ai remarqué quelque chose dans le débogueur.
Juste après une chaîne malloc'd comme ceci:
char *theString = malloc(SOME_SIZE * sizeof(char));
Je verrais que theString est \ x03 et * theString est "3 '\ 003'". J'ai supposé d'abord que c'était juste une mémoire bizarre puisque je n'avais pas enfilé de strcat ou quoi que ce soit, mais que des caractères de départ étranges passaient, et revenaient à chaque autre point que j'effectuais un même malloc. .
En termes de traitement normal, c'est correct. Malheureusement, je ne comprends pas ce que c'est, sinon, je ferais juste quelque chose de radical comme couper ce premier personnage ou quelque chose comme ça. Est-ce que quelqu'un peut m'expliquer ce que c'est et comment je m'en occupe si je veux le convertir en NSString en toute sécurité?
Notez que calloc ne doit pas être utilisé sauf si nécessaire (par exemple pour les structures ou les tableaux). –
Pouvez-vous élaborer à ce sujet? Je suppose que vous voulez dire qu'un pointeur sur un seul élément ne doit pas utiliser calloc (comme dans, pour les types intégrés)? – Sam
La réduction à zéro est potentiellement coûteuse. En outre, j'ai vu des choses étranges se produire lors de l'utilisation de calloc() avant, qui ont toutes été résolues en passant à l'utilisation de malloc() suivi de bzero(). –