[英]Keeping a c array in memory, to be able to access it later with a pointer
我想要一個ivar,它是指向ac數組的第一個元素的指針,但是我希望該ivar能夠訪問該c數組中的其他元素。
@interface myClass : NSObject {
int * _arrayElement;
}
@end
@implementation myClass
-(id)init {
self = [super init];
if (self) {
int A[50];
_arrayElement= &A;
}
return self;
}
@end
一旦該方法結束,c數組將退出堆棧,並且我無法通過移動指針來訪問其他元素(_arrayElements + 5將給我A [5])。
您需要在堆而不是堆棧上分配數組。 當超出范圍時,系統會回收在堆棧上分配的數組和其他變量,這意味着您不能在聲明它們的函數/塊之外引用它們,從技術上講,這稱為未定義行為,在實踐中通常會導致您的代碼崩潰。 使用malloc
。 所以代替:
int A[50];
_arrayElement = &A;
只是:
_arrayElement = (int*) malloc(50 * sizeof(int));
完成操作后,請記住要free
釋放內存:
free(_arrayElement);
另外,您可以使用new
和delete
關鍵字分配和取消分配內存C ++樣式:
_arrayElement = new int[50];
並且,釋放內存:
delete[] _arrayElement;
請注意,如果選擇使用new
和delete
,則必須將源代碼編譯為Objective-C ++代碼。 要使用Xcode進行操作,將文件的擴展名從.m
更改為.mm
應該就足夠了。
另一件事是,如果可以使用C ++構造函數和庫,則可以考慮使用std::vector<int>
而不是int *
;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.