首页 文章
  • 0 votes
     answers
     views

    C - 释放在另一个文件中分配的堆内存

    如果你有一个利用makefile编译多个文件和头文件的项目,这会使堆复杂化吗? 具体来说:我有一个包含 Headers 的 main.c 文件,比如 test.h . 在链接到 test.h 的 test.c 中,使用malloc显式分配内存 . main.c 调用 test.c 中的函数 . 出于某种原因,当我试图在 test.c 中的函数内释放内存时,我总是收到一个错误: main(65...
  • -1 votes
     answers
     views

    C:“无效的free():地址0x7feffee08在线程1的堆栈上”

    这不是我的确切代码,但实质上就是这样 . 我正在尝试在main()中创建一个堆栈变量 int ** x; 我想传递给函数foo(int ** x,arg1,arg2,...) . 在某些情况下,我应该在foo()中为x动态分配空间 x =(int **)malloc(sizeof(int ) num_elems); 我也没有为每个int *元素分配新的空间,而是分配给它&y,其中int y...
  • 0 votes
     answers
     views

    使用任意节点类型在C中创建堆 . 如何释放它?

    要求对这种设计选择进行健全性检查 . 我正在通过创建一个可以接受字符串或数字的节点类型的堆数据结构在C中编写堆排序 . (我正在创建自己的私有堆,我可以排序) 堆中的节点是void *,它们被解引用以执行比较操作 . Heap结构在Heap.nodesize中存储每个节点的大小,如果节点是字符串,则为-1 . 插入节点时,将为void *分配内存 . 如果Heap.nodesize为-1,则将...
  • 0 votes
     answers
     views

    在C中实现malloc,realloc,free时出现段错误

    我正在实现一个简单版本的malloc,realloc,并且可以免费进行分配并且无法进行调试 . 我的代码似乎适用于malloc,但realloc测试导致了seg错误 . 具体来说,传递给free()的指针似乎是个问题 . 有一个“空闲列表”来管理以前分配的内存块列表 . 此列表中的每个节点都维护下一个和前一个块,以及一个int free,当内存可用时设置为1,否则为0 . void *mm_mal...
  • -1 votes
     answers
     views

    从链表中删除选择节点

    我浏览了一些解释双链表中节点删除的文章,但我无法理解为什么以下代码无效 . 请提出一些解决方案 . 我有两个结构A和B.有一个结构链接列表A每个包含一个双向链表B.我试图从每个A中删除所有ID小于值的B结构 . 这是我试图这样做的方式 . typedef struct __B { int id; struct __B *next; struct __B *prev; } B...
  • 2 votes
     answers
     views

    结构和malloc()/ free()的麻烦

    我正在尝试将双向链表映射到GUI . 我基本上为列表中的每个节点创建一个按钮结构,将节点参数映射到按钮参数,然后在屏幕上显示它们 . 我可以添加很多按钮,超过500个,它们似乎保持了它们独特的数据并且没有重叠 . 但是,当我只删除一个按钮时,下一个malloc()函数无法创建新按钮,我只能删除 . 如果我摆脱free()函数,malloc()不再失败 . 所以,我的问题是我是否正确地创建和删除这些...
  • 0 votes
     answers
     views

    PCL可视化器 - 退出可视化器窗口时从Eigen抛出的异常

    我尝试了几个PCL可视化教程,并尝试将它们组合在一起 . 基本上,它生成3D点 Cloud 并使用PCL可视化器进行显示 . 该项目 Build 成功并且有效 . 但是,只要按“e”,“q”或按右上角的关闭按钮退出程序,就会从Eigen / src / Core / util / Memory.h行241抛出异常 . 非常感谢帮助或解释 . 谢谢 . 我正在使用msvc-12.0,64位,Boos...
  • 2 votes
     answers
     views

    C - 如何释放在其节点中具有链表的链表?

    作为我在内核空间编写的程序的一部分,我创建了一个链接列表,其节点中有另一个链表 . 节点可以是两种类型,可以是仅具有int值和char *值的通道,也可以是具有int值和通道链接列表的设备文件 . 但是我的freeList函数中有NULL指针引用 . 我得到的错误是:无法处理内核NULL指针取消引用 知道如何解决这个问题吗? struct node { int val; char*...
  • 32 votes
     answers
     views

    LinkedList - 如何释放使用malloc分配的内存

    我有一个非常简单的C代码,用于构建如下所示的单链接列表,其中我使用malloc动态地为每个节点分配内存 . 在代码结束时,我想为每个分配的节点释放内存,想知道如何去做 - 如果我首先从头节点开始并释放它,那么指向后续节点的指针就会丢失并发生内存泄漏 . 其他方式是从头节点开始并将节点指针保存在单独的指针或其他数组中,在存储节点指针时遍历列表直到尾指针,并且一旦到达尾节点,也将其存储到另一个数组指针...
  • 0 votes
     answers
     views

    C链表 - 何时释放已分配的内存

    我有一个简单的链表实现,包括push,pop,unshift和shift函数,可根据需要添加/删除数据 . 我想确保在通过调用pop和shift来检索数据时,我的实现不会泄漏内存 . 我如何释放已经通过malloc分配的内存,同时还将数据返回给调用者? list.h typedef struct _list_cell_t { void *data; struct _list_cel...
  • -2 votes
     answers
     views

    如何释放Adjency Linked List分配的内存?

    我想释放一个Adjency Linked List内存这是我的数据结构和两个可以为图形分配内存的函数 . 如何释放分配的内存?谢谢您的帮助 struct ListPoint { int dest; int weight; struct ListPoint* next; }; struct List { struct ListPoint* head; }; struc...
  • 5 votes
     answers
     views

    何时在C中使用可变长度数组,但是在动态分配时?

    我在C99中找到了可变长度数组,但看起来它的行为与malloc free几乎相同 . 我找到的实际差异: 太大的数组处理: unsigned size = 4000000000; int* ptr = malloc(size); // ptr is 0, program doesn't crash int array[size]; // segmentation fault, program ...
  • 1 votes
     answers
     views

    二叉树,不能释放内存

    我已经制作了一个二叉树(BST),它工作正常,但我无法释放我分配的内存 . 节点由指针(左,右,父)和数据组成,这是名字,姓名和电话号码 . 名字和名称是静态字符数组,电话号码是int,它也是我的树的键 . 我用这个函数来释放内存: void FreeYourTree(node* x) { if (!x) return; FreeYourTree(x->lef...
  • -2 votes
     answers
     views

    Malloc没有分配尽可能多的内存(我相信)[关闭]

    我想为某个大小的结构(例如,20个字节)分配足够的内存,加上额外的字节数,比如500(这个数字是在运行时计算的,因此不能简单地是结构的附加字段) ) . 所以,我有一个看起来像这样的malloc: some_struct *my_struct = (some_struct *) malloc (STRUCT_SIZE + MORE_BYTES); 但是,我很确定malloc只是为结构分配了足够的...
  • 3 votes
     answers
     views

    Cython:释放内存的内存视图

    在Cython代码中,我可以分配一些内存并将其包装在内存视图中,例如像这样: cdef double* ptr cdef double[::1] view ptr = <double*> PyMem_Malloc(N*sizeof('double')) view = <double[:N]> ptr 如果我现在使用 PyMem_Free(ptr) 释放内存,尝试访问像 p...
  • 1 votes
     answers
     views

    内存分配释放

    我正在编写链接列表,并在删除节点时尝试释放内存分配 . 但是,经过几个小时的尝试,我似乎无法获得干净的valgrind输出 . void * pop(struct List *list) { if(list->head == 0){ return 0; } struct Node * tempNode = list->head->next...
  • 0 votes
     answers
     views

    在C中使用Free()时的运行时错误

    我正在尝试在C中使用结构的链接列表,其中一个结构表示列表,另一个结构表示列表的成员 . 这是他们的定义: typedef struct symEntry symEntry; struct symEntry{ const char * key; const void * value; struct symEntry * next; struct symEntry *...
  • 1 votes
     answers
     views

    释放分配的内存

    gcc 4.4.5 c89 我有一个名为create_object的函数,我为全局结构分配内存 . 我有一个名为destroy_object的函数,我检查指针是否为空,然后我自由 . 只是因为我释放了尚未分配的内存 . 但是,我通过连续两次调用destroy_object来测试它 . 但是,我在第二次调用时获得了堆栈转储 . 但是,我确信它不会释放,因为我已将指针指定为NULL . 所以应该跳过免...
  • 0 votes
     answers
     views

    如何在C中合并两段内存?

    我应该使用链表实现硬编码malloc和free,其中链表包含免费的节点 . 1.如果正在释放某些东西,我必须用内存检查左右位置,如果它们是空闲的,则将它们合并在一起 . 但是,在以下调用之后,我遇到以下问题 . 注意我们malloc超过x字节b / c它是x sizeof(struct Node) Original Linked List: [2048] Call: ...
  • 0 votes
     answers
     views

    当C中存在冲突(使用单独的链接)时,无法释放哈希表中的节点

    好的,我有一个我在C中制作的哈希表 . 我使用单独的链接(链表)来解决冲突 . 我注意到如果没有碰撞并且每个项目都散列到它自己的索引,我可以释放整个表 . 但是如果存在冲突且我在索引处有多个值,则它只能释放该索引中的第一个值而不是剩余值 . 当程序尝试释放该索引处的其他程序时崩溃 . 我尝试调试它,我意识到那些其他值已经设置为NULL,我不知道为什么,因为当我将它们插入到表中时我正在使用mallo...
  • 1 votes
     answers
     views

    C - 我的记忆释放功能有什么问题?

    我有一个结构,其中包含2个整数和一个指向另一个结构的指针 . 我首先为struct分配内存然后为指针分配内存 . 当我释放内存时,我先释放指针,然后释放结构 . 当我运行我的程序并调用释放内存的函数时,它会在调用时崩溃 . 当我不调用释放内存的函数时它工作正常,但后来我没有释放内存 . 我尝试删除释放分配给指针的内存的行,程序不会崩溃,但我不认为这是正确的,因为每个“malloc / calloc...
  • 1 votes
     answers
     views

    无法使用free()释放内存

    我无法释放我使用malloc分配的内存 . 程序运行正常,直到它应该使用free释放内存的部分 . 程序冻结了 . 所以我想知道问题是什么,因为我只是在学习C.语法上代码似乎是正确的,所以我需要删除该位置的所有东西,然后从该位置或其他地方释放内存? 这是代码 . // Program to accept and print out five strings #include <stdio.h...
  • 0 votes
     answers
     views

    malloc和free动态变化的结构

    我在动态变化的结构中移动指针时遇到了麻烦 . 我已经创建了我的代码,你可以在malloc中获得更多的内存,这似乎是有效的 . 我遇到的问题是如何添加到结构,如何释放内存以及如何从结构移动到结构并打印所有项目 . 我正在尝试测试添加和打印(删除功能似乎没有用,segfaults) 当我添加到结构然后打印结构时,我从我添加的值中得到一个段错误 . 我不知道我是否正确地从第一个结构转移到下一个结构 . ...
  • -1 votes
     answers
     views

    如何在C中删除整个循环链表?

    我遇到了C的stdlib的free()函数的问题,我的知识这个函数一次只能删除链表的给定节点,如何使用这个函数删除整个循环链表? 我是否必须使指针指向循环链表的头部,并且逐个节点地自由,并且小心地使每个指针从下一个节点开始,在我可以释放该节点之前将其指向NULL?如果是这样,我如何释放头节点?
  • 2 votes
     answers
     views

    代码在分配内存时导致分段错误或在释放内存时中止程序

    当我尝试运行我的代码时,它会在第89行的malloc上导致分段错误,其中“s1 = malloc(65536);”即使我将其更改为calloc或realloc,它仍然存在,如果我有我的函数释放第82或86行的内存,它也会导致写入: *** glibc detected *** /home/purlox/whaat: free(): invalid next size (normal): 0x000...
  • 458 votes
     answers
     views

    当你在malloc之后没有自由时,真正发生了什么?

    这已成为困扰我多年的事情 . 我们都在学校(至少,我是)教过你必须释放所有分配的指针 . 不过,我有点好奇,关于不释放内存的实际成本 . 在一些明显的情况下,比如在循环或线程执行的一部分中调用 malloc 时,释放是非常重要的,因此没有内存泄漏 . 但请考虑以下两个例子: 首先,如果我的代码是这样的: int main() { char *a = malloc(1024); /*...
  • 312 votes
     answers
     views

    免费如何知道免费多少?

    在C编程中,您可以将任何类型的指针作为参数传递给free,它如何知道要释放的已分配内存的大小?每当我传递指向某个函数的指针时,我也必须传递大小(即10个元素的数组需要接收10作为参数来知道数组的大小),但我不必将大小传递给自由功能 . 为什么不,我可以在我自己的函数中使用相同的技术来避免需要购买数组长度的额外变量?

热门问题