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