Si je libère une instance de NSOperation
avant de lui envoyer -init
, j'obtiens un segmentation fault
.Existe-t-il un bogue dans NSOperation sous Mac OS X 10.6?
raisons je pense que ce code est valide:
- Apple fait cela dans its documentation.
- Gnustep le fait dans son
implementation of NSNumber
, donc il est assez certain que c'est aussi dans le code d'Apple. (Au moins était.) NSObject
s-init
ne fait rien, donc-release
, qui appartient àNSObject
devrait fonctionner avant cela.
// gcc -o test -L/System/Library/Frameworks -framework Foundation test.m
#import <Foundation/Foundation.h>
int main(int argc, char *argv[]) {
NSOperation *theOperation = [NSOperation alloc];
[theOperation release];
}
- Que pensez-vous, est-ce un bug?
- Pouvez-vous me montrer un exemple d'une autre classe qui a le même comportement?
- Une idée de pourquoi cela se passe-t-il?
@gs S'il vous plaît lire mon commentaire en réponse à la vôtre sur ma réponse :) –
Mon point encore debout :). Je suis sûr que '-init' de NSOperation alloue un pointeur (à une structure ou à n'importe quoi d'autre). La valeur du pointeur n'est pas définie sur NULL par le runtime, donc l'appel '-release' libère un pointeur qui n'a pas été initialisé et dont la valeur est 0 (quelque part où vous n'avez pas accès: D) –