微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我创建了一个旨在获取用户输入的功能.它要求将内存分配给保存用户输入的变量;但是,在函数结束时返回该变量.释放分配的内存的正确方法是什么?返回变量的值?

这是代码

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

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

return input;

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

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

解决方法

这很简单,只要你传递给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.

原文地址:https://www.jb51.cc/c/116377.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐