动态创建具有给定数量元素的数组

时间:2018-01-30 18:21:49

标签: c arrays memory-management

我不是100%确定我是否正确分配了一个包含10个元素的数组

char *str;


str = (int*)malloc(10 * sizeof(int)); 

任务是分配10个元素的字符串内存。

我是否已正确完成或是否必须添加" + 1"因为' \ 0'最后。

谢谢!

1 个答案:

答案 0 :(得分:6)

您分配的次数超过了您的需要。 (准确地说sizeof(int)次)。正确的是

#define MAXLEN 10
...
str = malloc(sizeof *str*(MAXLEN+1));

请注意,sizeof(char)1。所以你也可以这样做

str = malloc(MAXLEN+1);

检查malloc的返回值,如下所示:(malloc可能无法为请求提供服务,它可能会返回空指针。重要的是 检查这是为了防止以后尝试取消引用空指针。)

str = malloc(MAXLEN+1);
if(!str){
    perror("malloc");
    exit(EXIT_FAILURE);
}

void*char*转换也是隐含的 - 您无需转换malloc的返回值。

sizeof(*str)是一种更简洁的方法来获取我们在str中分配内存的元素类型的大小。好处是,当您稍后更改代码并使str指向包含int的已分配内存时,您不需要查找sizeof(char)然后将其替换为sizeof(int)这是通过自动使用sizeof(*str)完成的。