【发布时间】:2019-09-30 17:19:19
【问题描述】:
如果标题在问题上不够具体,我很抱歉,但我遇到了一些非常奇怪和不一致的问题,双指针,我不知道如何用一句话来描述它们。
基本上,每次我的程序运行时,它都会分配一个矩阵,其大小是动态随机生成的。
coord mapSize;
mapSize.row = randomRange(3, 5);
mapSize.column = randomRange(5, 7);
char** map = (char**) malloc (mapSize.row * sizeof(char));
for (int i = 0; i < mapSize.row; i++)
{
map[i] = (char*) malloc (mapSize.column * sizeof(char));
}
然后矩阵被初始化:
for (int i = 0; i < mapSize.row; i++)
{
for (int j = 0; j < mapSize.column; j++)
{
map[i][j] = CLEAN_FLOOR_SYMBOL;
}
}
只要矩阵的大小不超过 4 行,它就可以完美运行。如果发生这种情况,程序会在初始化到第五行时崩溃。更奇怪的是,即使行数大于5,当初始化到第五行时,问题依然存在。
我已通过在初始化循环期间打印出一些值来验证这一点。
printf("r: %d c: %d\n\n", mapSize.row, mapSize.column);
for (int i = 0; i < mapSize.row; i++)
{
printf("r: %d | c: ", i);
for (int j = 0; j < mapSize.column; j++)
{
map[i][j] = CLEAN_FLOOR_SYMBOL;
printf("%d ", j);
}
printf("\n");
}
这里有 6 行,但程序在尝试初始化第五行时仍然崩溃。
更奇怪的是,在 eclipse 的控制台上运行程序时似乎没有出现这些问题。那么,我是怎么搞砸的?
【问题讨论】:
-
allocate matrix in C的可能重复
-
@Croppi 根本不是那个问题的重复,尽管另一个问题可能被认为是这个问题的答案。
-
@EOF 也许你是对的。我之所以将其标记为重复,是因为上面的示例和链接基本相同——它们之间的区别只是变量类型。
标签: c pointers matrix malloc double-pointer