很抱歉,标题在这个问题上不够具体,但是我在使用双指针时确实遇到了一些奇怪而又不一致的问题,而且我不知道该如何用一句话来形容。
>基本上,每次我的程序运行时,它都会分配一个矩阵,该矩阵的大小是动态生成的。
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的控制台上运行程序时,似乎没有这些问题出现。那么,我怎么又搞砸了?
答案 0 :(得分:2)
在
D
您缺少a = A(); a.print_me()
,请don't cast the result of *alloc()
*):
__init__
更好:
char** map = (char**) malloc (mapSize.row * sizeof(char));
因为这里的类型的大小是随着*
的类型而变化的,所以如果必须更改,则不必记住在多个位置进行更改。
但是,如果您想要性能,请摆脱char **map = malloc (mapSize.row * sizeof(char*));
// ^
// here
。查找什么是锯齿状的数组并避免使用它:
char **map = malloc (mapSize.row * sizeof(*map));
*)如果编译器抱怨您正在使用C ++编译器来编译C代码。