关闭。这个问题需要debugging details .它目前不接受答案。
想改进这个问题?将问题更新为 on-topic对于堆栈溢出。
5年前关闭。
Improve this question
我需要通过动态内存分配来构建一个指向 int 的指针数组。
我首先声明:
int** queue = (int**)malloc(sizeof(int*));
并且比(大小=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);
程序崩溃。
我很想得到一些帮助。
提前致谢!
最佳答案
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
关于c - 指针数组的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41411478/