首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSPointerArray中的二维数组

NSPointerArray中的二维数组
EN

Stack Overflow用户
提问于 2013-02-17 21:06:59
回答 1查看 538关注 0票数 1

我创建了许多2Dint和float C数组,并将它们的指针赋给NSPointerArray。当我用数据创建和填充它们时,一切都很好,但是当我对数组执行addPointer时,我得到的是EXEC_BAD_ACCESS。Q1-为什么这是错误的?Q2-提供对使用calloc创建的许多2D数组的访问的最佳方法是什么?

代码语言:javascript
复制
- (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
}

以供参考

代码语言:javascript
复制
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;

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-17 21:35:07

NSPointerArray必须以正确的选项初始化。默认情况下,他试图保留传递的指针,但由于int**不是NSObject,因此会崩溃。相反,您必须告诉数组不要接触您添加的内存!使用不透明内存选项初始化它

您只调用了init,它等于initWithOptions: NSPointerFunctionsStrongMemory

您已经调用了initWithOptions:NSPointerFunctionsOpaqueMemory

代码语言:javascript
复制
#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");
}       
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14921395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档