gpt4 book ai didi

objective-c - 用[x] [y]访问我的malloc二维数组

转载 作者:行者123 更新时间:2023-12-01 16:54:18 24 4
gpt4 key购买 nike

我正在更新一个类,以使用成员变量而不是#defines定义2d数组的范围。它过去看起来像:

#define kWidth 3
#define kHeight 100
NSUInteger fields[kWidth][kHeight];

现在,kWidth和kHeight是iVars。我切换到malloc约定,因为我看不到其他选择,因为边界现在可以更改。问题是我无法使用两个[]([] [])访问数组。看到我的内联评论。我确定我已经正确分配了。在iOS之前和之前,我已经做过很多次了。为什么我不能以这种方式访问​​?
self.kFieldsHeight = 100;
self.kFieldsWidth = 3;
NSUInteger** fields = (NSUInteger**)malloc(sizeof(NSUInteger) * self.kFieldsHeight * self.kFieldsWidth);
memset(fields, 0xFF, self.kFieldsWidth * self.kFieldsHeight * sizeof(NSUInteger));

//// Now with LLDB I can examine the array in one dimension
// p fields[0] // 0xFFFFFFFF
// p fields[299] // 0xFFFFFFFF
// p fields[300] // 0xGARBAGE

//// THIS fails with "error: Couldn't dematerialize struct : Couldn't read a composite type from the target: gdb remote returned an

错误:E08“
// p个字段[0] [0]
// Thus this fails in my code
NSUInteger i = fields[0][0];

这是怎么回事?

编辑:(更多详细信息)
我也尝试过像这样分配:
fields = (NSUInteger**)malloc(sizeof(NSUInteger*) * self.kFieldsHeight);
if(fields){
for(int i = 0; i < self.kFieldsHeight; i++){
fields[i] = (NSUInteger*)malloc(sizeof(NSUInteger) * self.kFieldsWidth);
}
}

编辑:(甚至更详细)。我用相同的结果交换了宽度和高度:
fields = (NSUInteger**)malloc(sizeof(NSUInteger*) * self.kFieldsWidth);
if(fields){
for(int i = 0; i < self.kFieldsWidth; i++){
fields[i] = (NSUInteger*)malloc(sizeof(NSUInteger) * self.kFieldsHeight);
}
}

最佳答案

您需要这样做:

NSUInteger **fields = malloc(self.kFieldsHeight * sizeof(NSUInteger*));
for (int i = 0; i < self.kFieldsHeight; i++) {
fields[i] = malloc(sizeof(NSUInteger) * self.kFieldsWidth);
memset(fields, 0xFF, self.kFieldsWidth * sizeof(NSUInteger));
}

但这不是大多数人完成工作的方式。大多数开发人员使用大数组而不是2D数组,并尝试对其进行索引。像这样:
NSUInteger *fields = malloc(self.kFieldsHeight * self.kFieldsHeight *  sizeof(NSUInteger));
fields[h * width + w] = pixel_value;

关于objective-c - 用[x] [y]访问我的malloc二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13185465/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com