我有可能知道我是否在C中正确清理过?

mat*_*ots 1 c memory-leaks memory-management

我的代码看起来像,

#include<stdlib.h>
#include<string.h>
char** someArray = NULL;
size_t numberOfEntriesInArray = 0;
void addToArray(char* someString){
  someArray = realloc(someArray, (numberOfEntriesInArray+1) * sizeof(char*));
  someArray[numberOfEntriesInArray] = malloc( (strlen(someString) + 1) * sizeof(char) );
  strcpy(someArray[numberOfEntriesInArray], someString);
  numberOfEntriesInArray++;
}
void deleteSomeArray(){
  int i;
  for (i = 0; i < numberOfEntriesInArray; i++){
    free(someArray[i]);
  }
  free(someArray);
}
int main(){
  addToArray( .. );
  ..
  deleteSomeArray();
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让我知道deleteSomeArray它运作正常?即有没有办法检查是否还有更多需要释放的内存?

PS

如果我在程序中泄漏了内存,那么当程序死掉时内存会自动释放吗?如果没有,有没有办法得到泄露的记忆?

Oli*_*rth 6

有没有办法检查是否还有更多需要释放的内存?

使用内存调试器.如果你在Linux(或类似)工作,那么规范的例子是Valgrind.

如果我在程序中泄漏了内存,那么当程序死掉时内存会自动释放吗?

在大多数现代操作系统上,是的,操作系统在进程终止时回收所有内存.但你不应该把这当作泄漏记忆的借口!