我在我的一个对象上声明了一个基元数组,似乎无法从外部访问它。我在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错误,但我似乎无法找到原因。有人看到我遗失的东西吗?
答案 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 '*'