我可以知道我是否已经在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函数,因为您无法检查它是否成功(你应该记住它总是成功的,否则你的系统会有大问题)
在最近的操作系统中,当一个程序结束时,分配的内存被释放(即使我知道有内存泄漏)