Objective-C浮点数行为错误(EXC_BAD_ACCESS)

时间:2010-10-20 22:19:30

标签: iphone objective-c arrays exc-bad-access

我在我的一个对象上声明了一个基元数组,似乎无法从外部访问它。我在ObjectiveC上相当新,是否有一些明显的错误?

头文件:

@interface MyObject : NSObject {
    //@public <-- this shouldn't be necessary, right? I have accessors!
    float *d;   
}

@property float *d;

.m文件:

@synthesize d;

-(id) init {
...
    self.d    = (float*) malloc(sizeof(float) * n); //n > 1000
...
}

执行访问的位置:

MyObject* k = [MyObject init];

NSLog(@"%f",k.d[0]);

我在最后一行收到一个EXC_BAD_ACCESS错误,但我似乎无法找到原因。有人看到我遗失的东西吗?

3 个答案:

答案 0 :(得分:9)

你需要分配你的对象!

MyObject *k = [[MyObject alloc] init];

答案 1 :(得分:1)

我按如下方式编译并运行了一段代码:

@interface FloatClass : NSObject
{
    float* d;
}

@property float* d;

@end

@implementation FloatClass

@synthesize d;

-(id) init
{
    self = [super init];
    if (self != nil)
    {
        d = malloc(sizeof(float) * 10);
    }
    return self;
}

@end

int main(int argc, char *argv[])
{
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

    FloatClass* k = [[FloatClass alloc] init];
    NSLog(@"%f", k.d[0]);

    [pool drain];
}

它运行良好并打印0.00000。因此,我认为您没有向我们展示的代码存在问题。

注意,如果我k = [FloatClass init],我会抛出一个NSInvalidArgument异常。

注意2.确保init方法返回self。

答案 2 :(得分:0)

您的属性定义应为:

@property float* d; // missing the '*'