0

我完全被难住了。我已经调试了好几个小时了。我将 100 个 UInt32 的表分配为 100。我正在加载一个值表并将它们写入 2D 数组。出于某种奇怪的原因,当我到达第 67 行第 0 列时,写入似乎回绕到第 0 行元素 0。

我已经重写它来分配一个数组列表而不是一个 malloc。完全相同的行为。我尝试为索引做数学运算: _map[row * 100 + column] 而不是 _map[i,j] ,这会导致其他奇怪的行为。我在想也许有些东西溢出了,但由于数据太小,我看不出是怎么回事。显然我在做一些愚蠢的事情,但我只是......不能......看到它。

代码片段:

_map = malloc(100 * 100 * sizeof(UInt32));

int i = 0;
for (i=0; i <_columns; i++)
{
    columnList = [[lineList objectAtIndex:i] componentsSeparatedByString:@","];
    int j = 0;
    for (j=0; j < _rows; j++)
    {
        UInt32 dataInt = atoi([[columnList objectAtIndex:j] UTF8String]);

        // Convert the data
        NSDictionary* tDict = [fileMap objectForKey:[NSString stringWithFormat:@"%i", dataInt]];
        int newVal = [[tDict objectForKey:@"convert"] integerValue];

        _map[i,j] = (UInt32)newVal;

        UInt32 y =  _map[i,j];

        // This trips at row 67 element 0
        if (_map[0,0] != 1)
            printf("Here\n");



    }
}

任何帮助都将非常感激。

正如我在下面提到的,这段代码给出了同样的问题,它破坏了第一行。好像每一行都是同一行:

    int** testMap = malloc(100 * 100 * sizeof(int));
    int data = 0;
    for (int i = 0; i<100; i++)
    {
        for (int j = 0; j < 100; j++)
        {
            testMap[i, j] = data;
            data++;
            printf("(%i, %i)", i,j);
        }
        printf ("\n");
    }
4

0 回答 0