Des*_*e93 2 c arrays memory-management
我不是100%确定我是否正确分配了一个包含10个元素的数组
char *str;
str = (int*)malloc(10 * sizeof(int));
Run Code Online (Sandbox Code Playgroud)
任务是分配10个元素的字符串内存.
我是否正确完成了,或者我必须添加"+ 1",因为最后的"\ 0".
谢谢!
您分配的次数超过了您的需要.(sizeof(int)时间要准确).正确的是
#define MAXLEN 10
...
str = malloc(sizeof *str*(MAXLEN+1));
Run Code Online (Sandbox Code Playgroud)
请注意,这将sizeof(char)是1.所以你也可以这样做
str = malloc(MAXLEN+1);
Run Code Online (Sandbox Code Playgroud)
检查返回值,malloc如下所示:( malloc可能无法为请求提供服务,它可能会返回一个空指针.检查此项以防止以后尝试取消引用空指针非常重要).
str = malloc(MAXLEN+1);
if(!str){
perror("malloc");
exit(EXIT_FAILURE);
}
Run Code Online (Sandbox Code Playgroud)
此外void*,以char*转换是隐式的-你不需要投的返回值malloc.
sizeof(*str)是一种更简洁的方法来获取我们为其分配内存的元素类型的大小str.好处是,当您稍后更改代码并str指向一个已分配的内存时,该内存将包含int您不需要查找的-s sizeof(char),然后sizeof(int)通过sizeof(*str)自动使用来替换它.