Objective-c EXC_BAD_ACCESS (code=2, address=0x42)
Je suis nouveau en Objective-C programmation et j'ai cette erreur quand je lance mon programme (je veux juste la génération aléatoire de char). Alors, voici ce que j'ai fait jusqu'à présent:
(IBAction)generate{
int a = arc4random() % 26;
NSString * chaine = @"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char lettre = [chaine characterAtIndex:a];
NSMutableString * mot = [[NSMutableString alloc] initWithCharacters:lettre length:1];
hasard.text = mot;
}
J'ai essayé de simplement mettre ma variable 'lettre' au hasard.le texte, mais il ne fonctionnera pas avec l'erreur " Incompatible entier pointeur de la conversion de l'affectation à 'NSString *
' de 'char
'. J'ai donc créé un NSMutableString
à contenir mon caractère.
Quand je mets le caractère "e" à la main au lieu de la variable "lettre" sur la cinquième ligne, il fonctionne bien. Depuis que je peux voir dans le débogueur "lettre" contient une lettre aléatoire, pourquoi ai-je l'erreur dans le titre ?
(EXC_BAD_ACCESS (code=2, address=0x42))
.
arc4random_uniform(3)
à arc4random(3)
avec modulo.OriginalL'auteur Gab | 2012-06-13
Vous devez vous connecter pour publier un commentaire.
La fonction attend un pointeur sur un caractère, vous êtes en lui donnant un caractère littéral. Vous devez créer un pointeur vers elle. Aussi,
characterAtIndex
n'est pas le retour d'un personnage que vous ne le pensez. Elle renvoie une de caractères unicode qui est en fait uneunsigned short
au lieu d'uneunsigned char
. Toutefois, si vous modifiez votre code pour cela, il va travailler:MODIFIER Mais le moyen le plus simple serait tout simplement ceci:
Grand - grâce à partir d'un noobie 🙂
OriginalL'auteur borrrden
Vous avez besoin pour passer à quelque chose du type
const unichar *
, pas seulementchar
. Vous pouvez faire ceci à la place:De cette façon, vous évitez simplement de la chaîne c balivernes tout à fait.
Je l'ai changé. Merci.
Fait ce travail pour vous?
OriginalL'auteur woz
Pour
[NSMutableString initWithCharacters:length:]
, il accepte unC array of Unicode characters
, au lieu dechar
.En fait, vous pouvez sous-chaîne de votre ancien string & utiliser la chaîne de caractères via
[NSMutableString initWithString]
.OriginalL'auteur Raptor
initWithCharacters:length:
ne pas prendre un caractère unique en tant que premier argument. Il prend un tableau de unichars (comme un pointeur de cours). Si vous passer d'un seul caractère, il va essayer de déréférencer le personnage interprété comme un pointeur, et il sera erreur de segmentation.Par ailleurs, l'approche que vous prenez pour générer une lettre de la sous-chaîne est juste trop compliqué. Nous avons le
sustringWithRange:
méthode, afin de l'utiliser:Aussi, même cette méthode est trop compliqué. @borrrden points, utilisez simplement
à la place.
OriginalL'auteur
Pour convertir char* NSString*
essayer cette
lien
L'espère, sera utile
OriginalL'auteur CReaTuS
Juste au cas où quelqu'un visite encore cette question, encore une chose utile à faire est de vérifier pour vous assurer que vos pas en utilisant ios6 code spécifique, mais dans un ios5 simulateur... C'est ce qui a provoqué et a résolu le problème pour moi!
OriginalL'auteur Giovanni