我可以知道我是否已经在C中正确地清理了吗?

我可以知道我是否已经在C中正确地清理了吗?,c,memory-management,memory-leaks,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[number

我的代码看起来像

#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();
}
#包括
#包括
char**someArray=NULL;
大小\u 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;
对于(i=0;i
有没有办法知道
deleteSomeArray
是否正常工作? i、 是否有办法检查是否还有更多的内存需要释放

附言

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

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

使用一个。如果您在Linux(或类似环境)中工作,那么典型的示例是

如果我在我的程序中泄漏内存,当我的程序死亡时,内存是否会自动释放

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

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

使用一个。如果您在Linux(或类似环境)中工作,那么典型的示例是

如果我在我的程序中泄漏内存,当我的程序死亡时,内存是否会自动释放

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

如果我在程序中泄漏内存,当 我的程序死了

所有现代操作系统(Linux、Windows OS X、Android等)都将在程序(进程)死亡时清除

您使用的是什么操作系统?仍然有一些系统没有,但您需要告诉我们您正在使用什么操作系统来提供帮助


有没有办法知道deleteSomeArray是否正常工作?i、 e.是 有一种方法可以检查是否还有更多的内存需要存储 释放

有很多方法可以找到答案。有一些商业产品可以做到这一点,但我想你不会想要这些。我也是

在你知道自己有问题之前,不要把时间浪费在valgrind上。如果您只想知道“是否丢失了一个指针,而没有释放它?”,并且您正在使用Linux或gcc,那么您可以查看。这是一个函数,它返回一个结构,它似乎准确地告诉您malloc认为它有多少可用内存,以及它有多少可用内存。看起来很简单,几分钟的努力

如果我在程序中泄漏内存,当 我的程序死了

所有现代操作系统(Linux、Windows OS X、Android等)都将在程序(进程)死亡时清除

您使用的是什么操作系统?仍然有一些系统没有,但您需要告诉我们您正在使用什么操作系统来提供帮助


有没有办法知道deleteSomeArray是否正常工作?i、 e.是 有一种方法可以检查是否还有更多的内存需要存储 释放

有很多方法可以找到答案。有一些商业产品可以做到这一点,但我想你不会想要这些。我也是

在你知道自己有问题之前,不要把时间浪费在valgrind上。如果您只想知道“是否丢失了一个指针,而没有释放它?”,并且您正在使用Linux或gcc,那么您可以查看。这是一个函数,它返回一个结构,它似乎准确地告诉您malloc认为它有多少可用内存,以及它有多少可用内存。看起来很简单,几分钟的努力

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

操作系统内核将自动清理进程死时打开的所有内存分配、打开的文件、网络套接字等(无论进程终止的原因如何)

唯一的例外是为SystemV IPC和POSIX IPC机制提供的共享内存、共享信号量和消息队列IPC特性;有关详细信息,请参见ipc(5)
msgget(3)
semget(3)
shmget(3)
。(您将知道是否正在使用这些机制;它们不是很常见。有关查看系统上分配了哪些共享内存段、共享信号量和消息队列的简单方法,请参阅
ipcs(1)
实用程序。)

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

操作系统内核将自动清理进程死时打开的所有内存分配、打开的文件、网络套接字等(无论进程终止的原因如何)


唯一的例外是为SystemV IPC和POSIX IPC机制提供的共享内存、共享信号量和消息队列IPC特性;有关详细信息,请参见ipc(5),
msgget(3)
semget(3)
shmget(3)
。(您将知道是否正在使用这些机制;它们不是很常见。请参阅
ipcs(1)
实用程序,以获取查看系统上分配了哪些共享内存段、共享信号量和消息队列的简单方法。)

您必须信任free函数,因为您无法检查它是否成功(你应该记住它总是成功的,否则你的系统会有大问题)

在最近的操作系统中,当一个程序结束时,分配的内存被释放(即使我知道有内存泄漏)