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

标签 c memory-management memory-leaks

我的代码看起来像,

#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();
}

有什么方法可以让我知道 deleteSomeArray 是否正常工作? 即有没有办法检查是否还有更多内存需要释放?

附言

如果我在我的程序中泄漏内存,当我的程序结束时内存会自动释放吗?如果没有,是否有办法找到泄漏的内存?

最佳答案

Is there a way to check if there is still more memory that needs to be freed?

使用 memory debugger .如果您在 Linux(或类似系统)中工作,那么典型示例是 Valgrind .

If I leak memory in my program, is the memory automatically freed when my program dies?

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

关于c - 我是否有可能知道我是否已在 C 中正确清理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9865171/

相关文章:

objective-c - 如何从两个数组填充 TableView 内容?

c - 当结构体包含字符串时为其分配内存

c - 如何在函数内初始化和分配 char** 参数

python - Swig Python 模块中的 C++ 内存泄漏

ios - NSData dataWithContentsOfURL 泄漏和 datawithContentsOfURL :options:error reports the URL is nil?

将小写字符串转换为大写?在 C 中

c - Linux CPU 对所有系统进程的亲和性

java - Spark编码器: when to use beans()

android - 我需要为循环依赖使用 Wea​​kReference 吗?

ios - 为什么在属性中包装 ReactiveSwift MutableProperty 会导致泄漏?