Tag: 免费

C链接列表valgrind无效读取大小

我的链接列表和valgrind输出有问题。 这里没有进一步的说明是我的链表: typedef struct Map map; struct Map { void *address; double free_time; map* next; }*map_list; 使用虚拟头节点创建列表。 正如您所看到的,struct包含一个地址和一个空闲时间,我尝试将它们关联起来。 在find_and_free函数中,我使用时间搜索此列表,如果此时间小于列表中存储的时间,则取消分配已保存的地址。 然后我也解除了列表节点的释放。 这是用于查找任何小于我传递的空闲时间的函数。 如果它更小,我释放存储到列表中的地址,然后调用delete_map_node函数也解除分配列表的节点。 void find_and_free_address(map *root, double mtime) { map *current = root->next; assert(current); while(current) { if(current->free_time free_time); printf(“The map contains an address that is time to free\n”); //free_allocated_address(&current->address); free(current->address); delete_map_node(map_list, current->free_time); //delete(map_list,current->free_time); //return next; } […]

将free()参数转换为void * neccessary?

是否有必要将传递给free()的值转换为此代码段中的void指针? free((void *) np->defn); np是链表中的struct , defn是char * 。

基本的Malloc /免费

如果我对我的程序有这样的嗤之以鼻: struct Node *node; while(…){ node = malloc(100); //do stuff with node } 这意味着每次循环while循环时,我都会重新分配节点指针所指向的100个字节吗? 如果这是真的,那么如果我只有指针指向发生的最后一个malloc,如何释放我用所有循环所做的所有内存? 谢谢!

释放分配给char *(由`malloc`分配)的int *是否会调用Undefined Behavior?

标题可能令人困惑。 假设str是malloc分配的指针。 类型为int* ptr被赋值给它并被释放,如下面的代码片段所示: char* str = malloc(64); int* ptr = str; free(ptr); 我试图编译上面的代码。 它只是发出警告: source_file.c: In function ‘main’: source_file.c:10:16: warning: initialization from incompatible pointer type int* ptr = str; ^ 上面的代码是否调用未定义的行为? 上面的代码片段是否释放了malloc为str分配的malloc ?

多维char数组?

我要做的是创建一个二维数组的字符串以下seg故障,什么是错的? void add2(char***b, char *i) { if (!i) { b[0][0] = (char*) malloc(120); sprintf(b[0][0], “%s”, “hithere”); b[0][1] = (char*) malloc(120); sprintf(b[0][1], “%s”, “bithere”); } else { strcat(b[0][0], “\\\\”); strcat(b[0][0], i); strcat(b[0][1], “\\\\”); strcat(b[0][1], i); } } void add1(char ***b) { add2(b,NULL); add2(b,”one”); add2(b,”two”); add2(b,”three”); } int main() { char **keys[2] = {0}; int i,j; add1(keys); […]

可以在C中调用free()失败吗?

可以以任何方式调用free()吗? 例如: free(NULL);

我应该在exception终止时释放分配的内存吗?

我的程序(文本模式Web浏览器)动态分配内存。 当然,我在运行时释放不需要的块。 并且我在正常终止之前释放所有内容 – 因此内存泄漏检查器不会给我误报(并且如果需要重大重构则要灵活)。 现在,我不做的是在exception终止之前释放内存。 (目前,我的程序在信号和mallocs / reallocs失败后终止。) 我的问题是:你认为这种不好的风格吗? 我应该在exception终止时免费吗?

C编程:malloc和循环中的free

我刚开始用C语言,对malloc()和free()性能问题知之甚少。 我的问题是:如果我在一个while循环中调用malloc()后跟free() ,例如循环20次迭代,那么与在循环外调用free()相比,它会运行得更慢吗? 我实际上使用第一种方法将内存分配给缓冲区,从文件中读取可变长度字符串,执行一些字符串操作,然后在每次迭代后清除缓冲区。 如果我的方法导致很多开销,那么我想要一个更好的方法让我获得相同的结果。

这是C中的双重免费?

通常情况下,如果指针被释放两次,则它是双重释放。 例如, char *ptr; ptr=malloc(5 * sizeof(*ptr)); free(ptr); free(ptr); 以上代码被视为双重免费。 以下是否也被视为双重免费? char *ptr; char *ptr1; ptr=malloc(5 * sizeof(*ptr)); ptr1=ptr; free(ptr); free(ptr1); 谢谢。

存在一种在不使用全局变量的情况下释放atexit或类似内存的方法?

我正在用C开发一个项目,我需要释放已分配的内存,并在退出之前关闭所有打开的文件。 我决定实现一个clean函数来完成所有这些工作并用atexit调用它,因为有很多可能的退出场景。 问题是atexit不允许我用参数设置函数,所以我不能发送clean需要在进程结束时释放的指针。 所以我需要将每个可能需要释放的指针声明为全局变量,并且每个可能在程序中保持打开的文件? (我已经这样做但看起来不太好)或者确实存在类似的function,允许发送参数的atexit ? 或者更多可能还有另一种我失踪的方式?