【发布时间】:2017-03-26 05:38:23
【问题描述】:
我正在尝试创建一个小的 c 程序,它将读取任意大小的字符串,而不会出现任何内存泄漏。
根据我的研究,函数 malloc 可用于为我们想要存储的任何数据分配多个字节。
在我的程序中,我首先为 0 个字符分配空间,然后让指针 word 指向它。然后,每当我读取单个字符时,我都会创建一个指向 word 的指针 oldWord,一旦我为新字符分配了更大的内存位置,它就会释放旧的内存位置。
我的研究表明,函数 free 可用于释放不再需要的旧内存位置。但是,我不确定我哪里出错了。下面你可以看到我的代码。
#include <stdio.h>
#include <stdlib.h>
int main(void){
char *word = malloc(0);
printf("Enter name: ");
readWord(word);
printf("Your name is: %s\n", word);
free(word);
word = realloc(0);
printf("Enter name: ");
readWord(word);
printf("Your name is: %s\n", word);
free(word);
return 0;
}
void readWord(char *word){
int i = 0;
char *oldWord, c = getchar();
while(c != ' ' && c != '\n'){
oldWord = word;
word = realloc(word, i + 1);
free(oldWord);
word[i++] = c;
c = getchar();
}
oldWord = word;
word = realloc(word, i + 1);
free(oldWord);
word[i] = '\0';
}
【问题讨论】:
-
realloc使传入的指针无效。这意味着您不应该free它,但您需要释放从realloc返回的指针。 -
char *word = NULL;比char *word = malloc(0);好很多
标签: c pointers memory-leaks malloc dynamic-memory-allocation