c – 返回变量的正确方式来释放内存

前端之家收集整理的这篇文章主要介绍了c – 返回变量的正确方式来释放内存前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我创建了一个旨在获取用户输入的功能.它要求将内存分配给保存用户输入的变量;但是,在函数结束时返回该变量.释放分配的内存的正确方法是什么?返回变量的值?

这是代码

char *input = malloc(MAX_SIZE*sizeof(char*));
int i = 0;
char c;

while((c = getchar()) != '\n' && c != EOF) {
    input[i++] = c;
}

return input;

我应该返回输入地址并在使用之后释放它吗?

好奇的是最合适的方法来释放输入变量.

解决方法

@H_301_13@ 这很简单,只要你传递给free(),malloc()返回的同一个指针就可以了.

例如

char *readInput(size_t size)
 {
    char *input;
    int   chr;
    input = malloc(size + 1);
    if (input == NULL)
        return NULL;
    while ((i < size) && ((chr = getchar()) != '\n') && (chr != EOF))
        input[i++] = chr;
    input[size] = '\0'; /* nul terminate the array,so it can be a string */
    return input;
 }

 int main(void)
  {
     char *input;
     input = readInput(100);
     if (input == NULL)
         return -1;
     printf("input: %s\n",input);
     /* now you can free it */
     free(input);
     return 0;
  }

你不应该做的就是这样

free(input + n);

因为输入n不是由malloc()返回的指针.

但是你的代码,有其他问题你应该照顾

>你为MAX_SIZE字符分配空间,所以你应该乘以sizeof(char),它是1,而不是分配MAX_SIZE指针的sizeof(char *),也可以使MAX_SIZE作为一个函数参数,因为如果你正在分配一个固定的缓冲区,你可以在main()中定义一个大小为MAX_SIZE的数组,如char input [MAX_SIZE],并将其作为参数传递给readInput(),从而避免使用malloc()和free().>你正在分配那么多的空间,但是你不能阻止你的while循环中的溢出,你应该验证i< MAX_SIZE.

猜你在找的C&C++相关文章