我完全被难住了。我已经调试了好几个小时了。我将 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");
}