我需要构建一个指向int的指针数组,所有这些都是通过动态内存分配来实现的。 我首先宣布:
int** queue = (int**)malloc(sizeof(int*));
和(size = 1)
queue[*size-1] = (int*)calloc(1,sizeof(int));
我扫描一个整数:
printf("Enter item value to add\n");
scanf("%d",queue[*size-1]);
printf("Item %d added\n",*(queue[*size-1]));
所有这些代码都在同一个函数中,并且工作正常。 但是当我尝试在另一个函数中从此队列中打印某些内容或通过以下方式释放内存时:
for(i = 0;i<size;i++)
{
free(queue[i]);
}
free(queue);
程序崩溃了。 我很想得到一些帮助。 提前谢谢!
答案 0 :(得分:1)
int** queue = (int**)malloc(sizeof(int*));
只会分配足够的内存来容纳一个元素,所以如果大小为2或更高,你将在队列中找到你没有分配的内存,因此你会得到无法解释的行为(例如崩溃)。
如果您希望分配的内存队列为10,则需要分配足够的内存;
int** queue = (int**)malloc(sizeof(int*) * 10);
您需要使红色部分足够长以容纳所有元素,并将队列指向该元素的开头。
如果您不想将队列设为固定长度,可以使用realloc,例如
int** queue = (int**)realloc(queue, sizeof(int*) * ((*size)+1)); // resize red part
queue[(*size)-1] = (int*)calloc(1,sizeof(int)); // Creating the green part
在这里,我假设代码的其余部分的大小为int *size