c - 指针数组的问题

标签 c pointers malloc

关闭。这个问题需要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);

enter image description here

您需要使红色部分足够长以容纳所有元素,并排队指向该元素的开头。

如果不想让队列定长,可以使用 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/

相关文章:

python - 如何将 4 字节 IEEE(小端)float 二进制表示转换为 float

c - 目标文件的未初始化变量未显示在 linux size 命令中

c++ - C++ 中的 "free(): invalid next size (fast)"

c - C 中结构的 Malloc

C malloc valgrind - 在我的单链表实现中未初始化的内存

c - OpenCL 在 code::blocks 中包括 cl.h on Windows

java - 解释发生了什么(C 程序)

c - 访问二维数组中元素的精确语法 - 通过指针?

c - C sizeof() 如何返回这些值

pointers - 为什么 Fortran 指针总是可变的