我正在尝试动态创建一个char数组。但是,无论我把哪个数字作为大小数组的期望值,它只是保持使用4具有大小。如果我放置3,2甚至8,10则不会改变......
我初始化它的部分......
char *x;
x = (char *)calloc(10, sizeof(char));
if(x == NULL )
{
return;
}
cout <<"Size_Vector = "<<sizeof(x)<<endl; //Keep making the size of the array 4..no matter what
答案 0 :(得分:2)
x
是char *
类型的指针。 sizeof(x)
返回指针的大小而不是数组大小。
通常,由于 array decaying ,即使指针指向数组,也无法从指针类型中了解数组大小。
char *x = malloc(sizeof(char)*10);
// This will give you 4
printf ("%d\n", sizeof(x));
但是你可以得到一个数组类型的大小。
char x[10];
// This will give you 10
printf ("%d\n", sizeof(x));
答案 1 :(得分:2)
sizeof(x)
返回指针的大小而不是分配的内存或数组的大小。
它总是返回4
指针在你的环境中的大小为4
,它对所有人来说都是一样的。
您必须跟踪自己分配的内存量和数量。还要确保不要超出分配的内存范围。
答案 2 :(得分:0)
malloc调用返回一个void指针,当你说sizeof(指针)时,你要求指针的大小,而不是你刚刚声明的内存块。所以它给你4/8 / ...字节取决于在你正在使用的m / c上。
试试这个:
char * cptr;
int * iptr;
printf(“整数指针的大小为:%d \ n”,sizeof(iptr));
printf(“字符指针的大小为:%d \ n”,sizeof(cptr));
注意: malloc 指向通过调用动态获得的内存块的第一个元素的地址(即10 * 1 = 10个字节)。
答案 3 :(得分:0)
这是我为你写的一小段代码,如果你真的想通过调用calloc找到你保留的内存块的大小,虽然很明显,当你说10个1个字节的空格时,你会去像这里的情况一样得到10个字节,表示你想要10 * sizeof(char):
的main(){
char *ptr = NULL;
int i = 0;
int size = 0;
int n = 0;
printf("Enter the size of the dynamic array in bytes : ");
scanf("%d",&n);
ptr = (char*) calloc (n,sizeof(char));
for(i=0;i<n;i++){
size = size + sizeof(ptr[i]);
}
printf("Size is %d\n",size);
}