Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 访问我的malloc';带[x][y]的二维阵列_Objective C_Ios - Fatal编程技术网

Objective c 访问我的malloc';带[x][y]的二维阵列

Objective c 访问我的malloc';带[x][y]的二维阵列,objective-c,ios,Objective C,Ios,我正在更新一个类,以使用成员变量而不是#defines来定义二维数组的边界。它过去看起来像: #define kWidth 3 #define kHeight 100 NSUInteger fields[kWidth][kHeight]; 现在奎兹和赫特是伊瓦尔人。我切换到malloc约定,因为我看不到其他选择,因为边界现在可以改变了。问题是我无法使用两个[]([])访问阵列。请参阅我的内联注释。我相信我说的没错。我以前做过很多次,在iOS下。为什么我不能通过这种方式访问 错误:E08“ //

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

#define kWidth 3
#define kHeight 100
NSUInteger fields[kWidth][kHeight];
现在奎兹和赫特是伊瓦尔人。我切换到malloc约定,因为我看不到其他选择,因为边界现在可以改变了。问题是我无法使用两个[]([])访问阵列。请参阅我的内联注释。我相信我说的没错。我以前做过很多次,在iOS下。为什么我不能通过这种方式访问

错误: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.kFieldHeight);
如果(字段){
对于(int i=0;i
编辑:(更详细)。我交换了宽度和高度,结果相同:

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);
    }
}
fields=(NSUInteger**)malloc(sizeof(NSUInteger*)*self.kFieldsWidth);
如果(字段){
对于(int i=0;i
试试这个

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);
    }
}
fields=(NSUInteger**)malloc(sizeof(NSUInteger*)*self.kFieldsWidth);
如果(字段){
对于(int i=0;i
这样做没有真正的理由,只是说a[i]是a+i的另一种方式 我在这里使用的是我的C知识,而不是客观的C希望我能帮助你

你需要这样做:

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));
}

我也曾尝试过这样的错误定位:你是否考虑过错失一个大的、连续的块类型:<代码> nSuthOng*>代码>和大小>代码> siZeof(nSuthOngult)*Wux*Load ,然后访问它,如<代码> item =指针[宽度*行+列] < /代码>?同样,请注意,对于上帝的爱,不要抛出MalCurn(的)返回值。!它返回与任何数据指针类型兼容的
void*
。好的,关于强制转换的要点。关于你的阅读方式。如果它可以工作,那很好,但是类的其余部分已经编写好,并且运行良好,所以如果不需要,我不必去更改任何内容。这是完全有效的语法,应该可以正常工作我做错了什么(我没有看到)。当然,这只是降低了可读性。顺便问一下,你有没有尝试过一个块的方法和正确的索引?我实际上只是更新了我的帖子来分享我也尝试过mallocing的方法。(见更新)。结果相同。我可以使用一维来检查数组,但不能使用二维。使用新的内容编辑了我的帖子。尝试一下。我对它不是很乐观,但对你的努力表示感谢。我继续使用单索引重新实现了现有类。截止日期…..macrian,感谢你的努力。此时,我继续并重新实现了现有类-使用单索引实现现有的类代码,因为它可以工作,尽管我更喜欢双索引。必须继续。我认为实际分配和设置没有问题,因为(使用此线程中的大多数技术)我的类工作得很好(就像更改数组声明之前)使用单索引。我只是无法使用[][]语法访问它。不过,请尝试使用bool**的代码。它可以工作。不使用char**,不使用NSUInteger**。也许这会让人想起。修复了…所有问题。您的答案很好地证明了为什么应该使用
sizeof(*指针)
而不是
sizeof(type)
当mallocation时-此代码将在32位平台上调用一个非常好的未定义行为(其中
sizeof(NSUInteger)!=sizeof(NSUInteger*)
)。我还原了您的编辑。我更喜欢我的代码。第二部分中有一个错误已修复。为什么大多数开发人员都这样做?我不这么做,我发现使用2D数组更容易…我同意H2CO3,如果您有错误的代码,请接受编辑,否则请接受否决票。我被否决,因为我问了一个错误代码的问题…让我们不要请尽量少提建设性意见。
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));
}
NSUInteger *fields = malloc(self.kFieldsHeight * self.kFieldsHeight *  sizeof(NSUInteger));
fields[h * width + w] = pixel_value;