Free()在调用malloc()后无法正常工作>> [

问题描述 投票:1回答:2
我用C语言编写了以下函数,但有两个问题:

  1. 我被要求释放动态分配的内存,以防止使用过多的RAM,但是free(word)行仅对我的程序造成错误。如果我删除它,一切正常,为什么会这样呢?按照许多不同文章的建议使用完word后,我免费使用了。

  2. 我被要求在最小的空间内使用malloc,但是我该怎么做?当前,我的代码分配了max_str_len个RAM块,但是如果单词比a字母短得多,我不想为此分配200个块。有什么建议吗?
  3. 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; }

我用C语言编写了以下函数,但是有两个问题:我被要求释放动态分配的内存,以防止使用过多的RAM,但是free(word)这行只会导致程序出错。如果我...
c dynamic malloc free c99
2个回答
0
投票
您将mallocchar*放入了呼叫者提供的words[i],然后将其释放。那没有道理。如果您释放它,则呼叫者将无法对其进行任何操作。

0
投票
您的代码中存在多个问题:
© www.soinside.com 2019 - 2024. All rights reserved.