【发布时间】:2014-05-09 08:43:35
【问题描述】:
这是我第一次不得不在这里问一个通常不需要的问题,但这次我就是想不通。 基本上我正在尝试在 1 和 0 的控制台中创建一个网格(随机位置的 1 和 0)。 1 代表木片,0 代表空白。 为此,我必须使用这个函数来初始化和填充二维数组并返回指向完成数组的指针
int* createEnvironment(int width, int height, int numWoodChips)
然后我需要使用这个函数打印二维数组
void printEvrionment(int* environment, int width, int height)
这就是我目前所拥有的
int enviroWidth = 20;
int enviroHeight = 20;
int* createEnvironment(int width, int height, int numWoodChips);
void printEvrionment(int* environment, int width, int height);
void freeArray(int width, int* environment);
int main(int argc, char **argv)
{
int *arr = createEnvironment(enviroWidth, enviroHeight, 10);
printEvrionment(arr, enviroWidth, enviroHeight);
getchar();
freeArray(enviroHeight, arr);
return 0;
}
int* createEnvironment(int width, int height, int numWoodChips)
{
int Num = 1;
/*randNum = (rand() % 1) + 0;*/
int temp = 3;
int woodChipCounter = 0;
int counter = 0;
int *array;
array = malloc(sizeof(array)*height *width);
for (int j = 0; j < height; j++)
{
for (int i = 0; i < width; i++)
{
counter++;
if (counter == temp)
{
array[j*width + i] = 1;
temp++;
woodChipCounter++;
counter = 0;
}
else
{
array[j*width + i] = 0;
}
if (woodChipCounter == numWoodChips)
{
Num = 0;
}
}
}
return array;
}
void printEvrionment(int* environment, int width, int height)
{
for (int j = 0; j < height; j++)
{
printf("\n");
for (int i = 0; i < width; i++)
{
printf("%d", environment[j]);
}
}
}
void freeArray(int height, int* environment)
{
for (int i = 0; i < height; i++)
{
free(environment[i]);
}
free(environment);
}
【问题讨论】:
-
在你的malloc中使用
sizeof(*array);不是sizeof(array)。而且您的freeArray和printEnvironment似乎最初都以 pointer 数组为中心,这不是您的代码分配的。 -
那么,有什么问题?
-
应该是
printf("%d ", environment[j * width + i]); -
另外,在
freeArray中丢失循环。malloc只有一个电话,所以你只需要一个free。 -
这是我第一次在这里问问题你实际上并没有问问题。
标签: c function pointers multidimensional-array