我创建了许多2Dint和float C数组,并将它们的指针赋给NSPointerArray。当我用数据创建和填充它们时,一切都很好,但是当我对数组执行addPointer时,我得到的是EXEC_BAD_ACCESS。Q1-为什么这是错误的?Q2-提供对使用calloc创建的许多2D数组的访问的最佳方法是什么?
- (NSPointerArray *)treeData{
if (_treeData == nil) {
_treeData = [[NSPointerArray alloc] init];
int** VVD = createIntArray(3000,200);
[_treeData addPointer:VVD];
}
return _treeData; // addеd later to the post, exists in live code
}以供参考
int** createIntArray(int n, int m)
{
int i=0;
int* values = calloc(m*n, sizeof(int));
int** rows = malloc(n*sizeof(int*));
for ( i=0; i<n; ++i)
{
rows[i] = values + i*m;
}
return rows;}
发布于 2013-02-17 21:35:07
NSPointerArray必须以正确的选项初始化。默认情况下,他试图保留传递的指针,但由于int**不是NSObject,因此会崩溃。相反,您必须告诉数组不要接触您添加的内存!使用不透明内存选项初始化它
您只调用了init,它等于initWithOptions: NSPointerFunctionsStrongMemory
您已经调用了initWithOptions:NSPointerFunctionsOpaqueMemory
#import <Foundation/Foundation.h>
int** createIntArray(int n, int m)
{
int i=0;
int* values = calloc(m*n, sizeof(int));
int** rows = malloc(n*sizeof(int*));
for ( i=0; i<n; ++i)
{
rows[i] = values + i*m;
}
return rows;
}
int main(int argc, char *argv[]) {
@autoreleasepool {
id _treeData = [[NSPointerArray alloc] initWithOptions:NSPointerFunctionsOpaqueMemory];
int** VVD = createIntArray(3000,200);
[_treeData addPointer:VVD];
}
NSLog(@"EOF");
} https://stackoverflow.com/questions/14921395
复制相似问题