我用C语言编写了以下函数,但有两个问题:
-
我被要求释放动态分配的内存,以防止使用过多的RAM,但是行
free(word)
只会导致程序出错。 如果我删除它,一切正常,为什么会这样呢?按照许多不同文章的建议使用完word
后,我免费使用了。 -
我被要求以最小的空间使用malloc,但是我该怎么做呢? 当前,我的代码分配了
max_str_len
个RAM块,但是如果单词像a
这样的字母短得多,我不想为此分配200个块。 有什么建议吗?
int read_words(char *words[],int size,int max_str_len) {
char *word;
char ch;
int i;
for (i = 0; i < size; ++i) {
word = (char *)malloc((max_str_len + 1) * sizeof(char));
if (word == NULL)
return -1;
for (int j = 0; j < max_str_len; ++j) {
scanf("%c",&ch);
if (ch == '\n') break;
if (ch == EOF || ch == 'R') return i;
word[j] = ch;
}
words[i] = word;
free(word);
}
return i;
}