1

我正在尝试动态创建一个 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
4

4 回答 4

2

x是一个类型的指针char *sizeof(x)返回指针的大小而不是数组大小。

通常,即使指针类型指向数组,也无法从指针类型中知道数组大小,因为数组衰减

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));
于 2012-04-18T04:33:40.970 回答
2

sizeof(x)返回指针的大小,而不是分配的内存或数组的大小。

它总是返回4您环境中指针的大小,4并且对所有人都是一样的。

您将必须跟踪自己分配了多少内存,并确保您的写入不会超出分配的内存范围。

于 2012-04-18T04:33:57.030 回答
0

malloc 调用返回一个 void 指针,当您说 sizeof(pointer) 时,您询问指针的大小,而不是您刚刚声明的内存块。因此,它为您提供 4/8/... 字节,具体取决于 m /c 你正在使用。

试试这个:

char *cptr;

int *iptr;

printf("size of integer pointer is : %d\n",sizeof(iptr));


printf("size of character pointer is : %d\n",sizeof(cptr));

注意:malloc指向您通过调用它动态获得的内存块的第一个元素的地址(即 10 * 1 = 10 个字节)。

于 2012-04-18T05:07:52.137 回答
0

这是我为您编写的一小段代码,以防您真的想通过调用 calloc 找到您保留的内存块的大小,尽管很明显,当您说 10 个空格,每个空格 1 个字节时,您将获得 10 个字节就像这里说你想要 10 * sizeof(char) 的情况:

#include<stdio.h>

#include<stdlib.h>

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);

}
于 2012-04-18T05:38:11.537 回答