没有将分配内存的实际大小获取到指针
Not getting the actual size of allocated memory to a pointer
我正在尝试为 100 个整数分配 space。但最终得到 2 并且不知道为什么! malloc()
和 calloc
我都试过了,但据了解没有区别。
代码:
#define MAX 100
int *arr = (int *)calloc(MAX, sizeof(int)); //same with malloc(MAX * sizeof(int))
printf("MAIN before memset: %d | %d\n",
(int)(sizeof(arr)/sizeof(arr[0])), (int)(sizeof(arr)));
if(!arr) {
fprintf(stderr, "A malloc error occured.\n");
exit(1);
}
memset (arr, 0, MAX);
printf("MAIN: %d\n", (int)(sizeof(arr)/sizeof(arr[0])));
输出:
MAIN before memset: 2 | 8
MAIN: 2
我还缺少什么?我只是想将 array/pointer 分配给 100 个整数。
在您的代码中,arr
是一个指针,在指针上使用 sizeof
会给出指针的大小,而不是分配给该指针的内存量。
在您的情况下,sizeof(arr)
为您提供 int *
的大小,sizeof(arr[0])
为您提供 int
的大小,具体取决于您的平台和编译器。
也就是说,你不能直接从指针本身得到分配内存的大小,你需要自己跟踪它。
我正在尝试为 100 个整数分配 space。但最终得到 2 并且不知道为什么! malloc()
和 calloc
我都试过了,但据了解没有区别。
代码:
#define MAX 100
int *arr = (int *)calloc(MAX, sizeof(int)); //same with malloc(MAX * sizeof(int))
printf("MAIN before memset: %d | %d\n",
(int)(sizeof(arr)/sizeof(arr[0])), (int)(sizeof(arr)));
if(!arr) {
fprintf(stderr, "A malloc error occured.\n");
exit(1);
}
memset (arr, 0, MAX);
printf("MAIN: %d\n", (int)(sizeof(arr)/sizeof(arr[0])));
输出:
MAIN before memset: 2 | 8
MAIN: 2
我还缺少什么?我只是想将 array/pointer 分配给 100 个整数。
在您的代码中,arr
是一个指针,在指针上使用 sizeof
会给出指针的大小,而不是分配给该指针的内存量。
在您的情况下,sizeof(arr)
为您提供 int *
的大小,sizeof(arr[0])
为您提供 int
的大小,具体取决于您的平台和编译器。
也就是说,你不能直接从指针本身得到分配内存的大小,你需要自己跟踪它。