可能重复:
Realloc没有调整指针数组的大小
谁能告诉我我的错误在哪里?这个函数应该提供从中提供的字符数组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;
}
Run Code Online (Sandbox Code Playgroud)
输出:
完成!尺寸应为:1B,但实际尺寸为8B完成!尺寸应为:2B,但实际尺寸为8B完成!尺寸应为:3B,但实际尺寸为8B完成!尺寸应为:4B,但实际尺寸为8B
错误是sizeof()不会告诉您分配的字节数.它告诉你的大小char *
听起来你想要的是验证你分配了正确的内存量.sizeof()不会给你这些信息.在这一点上,它处于低级别的细节中,您需要做一些依赖于OS的东西来尝试找到这些信息.(例如在Linux内核中,如果你有kmalloc()内存,你可以用来ksize()确切地知道你得到了多少字节)