free相关内容

释放字符串后仍然可以打印字符串吗?

我正在学习和测试C语言中的内存分配,我想测试如果调用free()会发生什么. 我运行下面的程序后,可能会出现分段错误或指针为NULL.但是,我仍然可以像在Output中一样成功地打印字符串.我还尝试两次释放str,然后发生错误,输出2. 似乎先前分配的内存已成功释放,但内存中的数据未清除.那是对的吗?如果是这样的话,程序什么时候可以清理那些释放的内存空间?如果数据被释放但没有清理,那安 ..
发布时间:2020-05-05 12:35:24 其他开发

确实在_SUCCESS和_FAILURE上都存在exit()释放的已分配内存

这是一段简短的代码,如果失败,将两次调用exit(3). 这些调用会释放由malloc分配的内存吗? Google搜索曾经说过,甚至很多时候都没有…… 我应该添加free()吗? 也:if (!word)更好(它也适用于例如word == 0,它与word == NULL不同,所以我想这是错误的)或if (word == NULL)吗? char *word = NULL, *t ..
发布时间:2020-05-05 12:34:50 其他开发

strtok和内存泄漏

我使用strtok()编写了一个简单的URL解析器.这是代码 #include #include typedef struct { char *protocol; char *host; int port; char *path; } aUrl; void parse_url(char *url, aUrl *r ..
发布时间:2020-05-05 12:34:37 其他开发

使用1个malloc调用为2d矩阵分配内存

We can allocate memory for 2d matrix using 1 malloc call as int (*a)[5]; int i,j; a = malloc(sizeof(int *)* 5); //分配5个指针 并且每个指针都指向5个整数的数组 我们如何释放成功分配的内存? 使用free(a)会导致运行时错误 使用 for(i = 0; i ..
发布时间:2020-05-05 12:34:16 其他开发

什么时候应该在C中使用free()?

尽管它从不释放malloc()分配的内存,但是代码按预期的方式工作. 我试图在任何可能的地方释放内存,但是无论我在哪里执行,都会破坏程序.具体来说,我收到“双重释放或损坏错误".关于free()和malloc()的实际作用,这更多是一个问题.免费的所有问题都在主要方面: int main(int argc, char *argv[]){ if(argc!=2){ exit(1 ..
发布时间:2020-05-05 12:34:08 其他开发

什么时候需要动态内存?

可能重复: Malloc还是常规数组定义? 我们了解到C和动态变量中都有动态内存: #include int a = 17; int main(void) { int b = 18; //automatic stack memory int * c; c = malloc( sizeof( int ) ); //dynamic heap memory ..
发布时间:2020-05-05 12:33:56 其他开发

两次免费调用指针

在课堂上我被教过,在指针上两次调用free()确实非常糟糕.我知道这是一种好习惯,在释放它之后立即将指针设置为NULL. 但是,我至今仍未听到任何关于其原因的解释.据我了解,malloc()的工作方式,从技术上讲应该跟踪已分配并给您使用的指针.那么,为什么不知道通过free()接收到的指针是否已经释放呢? 我想了解一下,当您在以前已释放的位置上呼叫free()时,内部会发生什么. ..
发布时间:2020-05-05 12:33:50 其他开发

C-如何从Stdin或文件内存保存中读取字符串行

我需要读取行的版本可以节省内存.我有这个“工作"的解决方案.但是我不确定它在内存中的行为.当我启用free(text)时,它可以工作几行,然后出现错误.因此,尽管我分配了文本,但现在文本和结果都不会被释放.那是对的吗 ?那为什么会这样呢? #include #include #include char* readFromIn( ..
发布时间:2020-05-05 12:33:32 其他开发

尝试访问C中释放的内存时没有警告

我试图了解如何在C语言中管理内存.在下面的示例代码的注释中,我添加了对如何管理内存的理解. 我想知道我是否正确 在代码的最后部分,我试图访问已释放的内存部分.我很惊讶为什么编译器没有通过任何警告 struct node { int keys[2]; int *pkeys; }; int main() { int temp[2] = {10,20}; // c ..
发布时间:2020-05-05 12:33:28 其他开发

是否需要将free()参数强制转换为void *?

是否有必要将此代码段中传递给free()的值转换为void指针? free((void *) np->defn); np是链接列表中的struct,而defn是char *. 解决方案 C11:7.23.2.3免费功能 简介 #include void free(void *ptr); 这意味着它可以将指针带到任何类型(void *是通用 ..
发布时间:2020-05-05 12:32:44 其他开发

C语言:释放指向struct的指针的内存

说我已经声明了一个指向结构的指针,并使用此定义将其分配给malloc() typedef struct node { int info; struct node *next; } NODE; 然后在代码中的某个地方我声明了两个指向它的指针 NODE *node1, *node2 = NULL; node1 = malloc(sizeof(NODE)); node2 ..
发布时间:2020-05-05 12:32:35 其他开发

基本的Malloc/免费

如果我的程序摘要如下: struct Node *node; while(...){ node = malloc(100); //do stuff with node } 这意味着每次循环遍历while循环时,我都会新分配100个由节点指针指向的字节,对吗? 如果这是真的,那么如果我只剩下一个指向最后发生的malloc的指针,那么该如何释放所有循环产生的所有内存? ..
发布时间:2020-05-05 12:32:31 其他开发

free()无法正确释放内存?

我试图释放用malloc分配的内存,但是根据Eclipse的调试器,free命令似乎不能正常工作.这怎么可能? 下面是我的调试器的屏幕快照,据说它释放了seCurrent->student->year,显然不是这种情况. year是使用malloc分配的. 替代文本http://img693.imageshack.us/img693/7840/codeo .png 解决方案 f ..
发布时间:2020-05-05 12:32:29 其他开发

使用malloc和free了解指针

在C语言中,指针是一件非常棘手的事情.对于很多人来说,很难理解它,因此,为了更好地理解,我编写了以下代码: #include #include int main(int argc, char *argv[]) { int *p; // pointer -> will be dynamic allocated int *a; // a ..
发布时间:2020-05-05 12:31:14 其他开发

如何在C语言中执行自动内存管理?

在malloc和free中完成的C内存分配/取消分配. 在C ++中,由new和delete完成的内存分配/取消分配. C ++中有一些用于自动内存管理的解决方案,例如: 智能指针. RAII(资源获取正在初始化) 引用计数和循环引用 ... 但是我如何在C语言中进行自动内存管理? 在C中是否有用于 AUTOMATIC 内存管理的解决方案? 对于C是否有任 ..
发布时间:2020-05-05 12:30:59 其他开发

当使用free()释放内存时,为什么指针所指向的内容没有改变?

关于动态内存分配,我是新手.当我们使用void free(void *ptr)释放内存时,将释放内存,但不会删除指针的内容.这是为什么?最新的C编译器有什么区别吗? 解决方案 计算机不会像这样“删除"内存,它们只是停止使用对该内存单元的所有引用,而忘记了任何有价值的东西都存储在那里.例如: int* func (void) { int x = 5; return &x; } ..
发布时间:2020-05-05 12:30:13 其他开发

释放函数中的已分配结构

我正在创建一个包含缓冲区功能的源文件,该功能要用于我正在创建的其他库. 它可以正常工作,但是我很难摆脱我在其中一个函数中创建的缓冲区结构.以下代码片段应有助于说明我的问题: C标头: //dbuffer.h ... typedef struct{ char *pStorage; int *pPosition; int next_position; ..
发布时间:2020-05-05 12:30:09 其他开发

malloc在分配内存时会保留更多空间吗?

我在测试程序中观察到以下行为: 我正在将malloc()占用1 MB,然后在sleep(10)之后执行free().我已经做过五次了.程序运行时,我正在观察top中的内存消耗. 一旦free() -d,我预计程序的虚拟内存(VIRT)消耗将减少1 MB.但实际上并非如此.它保持稳定.这种现象的解释是什么? malloc()在分配内存时会做一些保留吗? 解决方案 一旦free ..
发布时间:2020-05-05 12:29:44 其他开发

调用free()后未释放内存

我有一个简短的程序,该程序通过向其添加节点来生成链表,然后释放由链表分配的内存. Valgrind不会报告任何内存泄漏错误,但是该过程将继续保留分配的内存. 仅在将分配的内存从sizeof(structure_name)更改为固定数字512后,我才能修复该错误.(请参见注释的代码) 这是错误还是正常操作? 这是代码: #include #inclu ..
发布时间:2020-05-05 12:29:09 其他开发

C-内存释放后访问数据吗?

我在标准C中阅读了很多有关malloc()和free()的信息.据我了解,您malloc()一次只存储一些内存,然后free()一次只存储相同的内存.这可能是不好的做法,但是我了解到malloc()内存之后,您可以定义指向它的多个指针.而一旦您free()这些指针中的任何一个,分配的内存就被取消分配了吗? 考虑这个玩具示例: #include #include ..
发布时间:2020-05-05 12:28:59 其他开发