c - realloc 不改变数组的大小

标签 c arrays realloc

<分区>

Possible Duplicate:
Realloc is not resizing array of pointers

谁能告诉我我的错误在哪里?此函数应生成一个由 stdin 提供的字符组成的数组。我看了一些相关的问题,但太复杂了,我看不懂。

char *readChar(void)
{
    int c;
    int len = 0;
    char* parr = malloc(sizeof(char));

    while((c = getchar()) != EOF)
    {
        ++len;
        int size = sizeof(char)*len;
        parr = (char *) realloc(parr,size);
        *(parr+size-1) = (char) c;
        printf("Done! Size should be: %dB, but real size is %dB\n",size,sizeof(parr));
    }

    return parr;
}

输出:

Done! Size should be: 1B, but real size is 8B Done! Size should be: 2B, but real size is 8B Done! Size should be: 3B, but real size is 8B Done! Size should be: 4B, but real size is 8B

最佳答案

错误在于 sizeof() 不会告诉您分配的字节数。它告诉您 char *

的大小

听起来您想要的是验证您分配的内存量是否正确。 sizeof() 不会为您提供该信息。此时处于低级细节,您需要做一些依赖于操作系统的事情来尝试找到该信息。 (例如,在 Linux 内核中,如果你使用 kmalloc() 内存,你可以使用 ksize() 来找出你得到了多少字节)

关于c - realloc 不改变数组的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12826002/

相关文章:

c - 如何查找堆栈是向上还是向下增加?

c - 嵌套多个 while 循环 - CS50greedy.c less

python - 使用 np.savez 存储字典会产生意想不到的结果?

python - 在 Windows 上构建 pHash 库

c - 给定 n 个点,最大化三角形面积

javascript - 如何将 JSON 数组中的特定对象元素获取到 JavaScript 数组中

php - 非法偏移类型

c、malloc 和 realloc 结构体数组

c - 如果目标和源相同,那么 memmove 会做什么?