为什么 ptr 具有相同的大小,即使我期望 ptr 的大小为 5*size(int)/4 = 20 但我得到当前大小是 8 并且新大小是 8,请任何解释?
int *ptr;
ptr = (int*)malloc(5 * sizeof(int));
printf("current size is %ld\n", sizeof(ptr));
for (int i = 0; i < 5 ; i++)
{
ptr[i] = i + 1;
}
for (int i = 0; i < 5 ; i++)
{
printf("%d\n",*(ptr + i));
}
ptr = (int*)realloc(ptr, 10 * sizeof(int));
printf("new size is %ld\n", sizeof(ptr));
for (int i = 0; i < 5 ; i++)
{
printf("%d\n", *(ptr + i));
}
64 位 PC 上的任何指针“可能”都是 64 位,即 8 个字节。您正在打印指针本身的大小,而不是它指向的整个内存块。 请参阅@kaylum 在评论中指出的文章。
如何确定分配的C缓冲区的大小?在 C 中,您不应投射
malloc
calloc
或 realloc
的结果。 我应该转换 malloc 的结果(在 C 中)吗?
malloc
calloc
和realloc
功能可能失败。您应该在继续之前检查它们是否成功,以避免出现错误。 如果
realloc
realloc
成功时才分配回原始指针。例如
#include <memory>
int main(void) {
size_t sz = 2;
int *mem = malloc(sizeof(int) * sz);
if (!mem) {
fprintf(stderr, "Memory allocation for %d ints failed.\n", sz);
return 1;
}
sz *= 2;
int *tmp = realloc(mem, sizeof(int) * sz);
if (!tmp) {
fprintf(stderr, "Memory reallocation for %d ints failed.\n", sz);
free(mem);
return 1;
}
mem = tmp;
return 0;
}