使用char时加倍释放或损坏**

时间:2019-01-23 18:19:14

标签: c pointers memory-management malloc

我正在为sq(n) def multiply(x): def multiply_x(f): def f_(*k): return x*f(*k) return f_ return multiply_x @multiply(3) def sq(n): return n*n int *occurrences指针分配内存,然后在分配内存的函数结束时,我释放了它们。但是,当我编译程序时,出现int *wordCounts错误。是由char **uniqueWordsdouble free or corruption (!prev) aborting引起还是我在malloc内部初始化它们的原因?

PS:我说的是free方法,该方法位于末尾

for loop

1 个答案:

答案 0 :(得分:2)

您正在覆盖第185行上指向堆内存的指针的值:

uniqueWords[i] = wordList[i];

这意味着以后free时,实际上是在释放wordList中分配的行。现在您有两个问题:

  1. 当您释放第244-246行的wordList行时,这将是两次免费
  2. 您正在丢失对uniqueWords行的引用。

使用strcpy分配给动态分配的字符串,而不是=操作。