问题标签 [free]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
3413 浏览

c - malloc() 的奇怪行为

试图理解我的问题的答案

当试图释放堆管理器分配的内存时会发生什么,它分配的比要求的多?

我写了这个函数并且对它的输出感到困惑

输出

任何人都可以解释这种行为吗?或者这个实现是特定的?

如果 free(q) 未注释,我也会收到 SIGABRT。

0 投票
5 回答
238 浏览

c++ - 堆损坏问题

在我的模板函数中,我有以下代码:

这会导致“检测到堆损坏”错误。如果我不调用 free() 函数,则不会发生错误,但我担心我正在创建内存泄漏。返回的正确方法是什么“存储”的值,然后释放内存?

0 投票
3 回答
2788 浏览

c - C 链表内存使用情况(可能的内存泄漏)

我在应该是一个简单的程序时遇到了麻烦。

void*我使用指针在 C 中编写了一个单链表实现。但是,我有一个问题,因为某处可能存在内存泄漏,但是我使用 valgrind 检查了代码,它没有检测到此类错误。

但是当所有内存都被释放时free,仍然有一些内存未释放(见评论)......我也尝试通过引用将所有内容传递给 add 函数,但这也没有解决问题。

我只是想知道这里是否有人对查看代码有任何意见。(这应该很简单!对吧?)

谢谢!

0 投票
5 回答
256 浏览

c - 关于我在 C 中使用 void* 作为动态数据类型的模块化代码的几个问题

几天前我发布了这个问题,每个人都建议我使用void*,我做到了。我认为他们中的一些人还指出了一些我需要注意的事情,但我不确定它们到底是什么。但是,我遇到了一些问题......

我不会将我所有的代码都发布在它很大的地方,相反,我会发布我认为重要的东西,希望足以让你帮助我。

我的哈希表结构是这样的:

我的插入函数的签名是这样的:

在该函数内部的某个地方,当我在哈希表中找到一个空闲存储桶时,我会这样做:

所有这些都带来了一些问题:

1)正如您在上面看到的,我只是将空闲存储桶的每个键/值对设置为与键/值hashInsert函数参数传递的相同指针。这带来了一个问题,您可能已经注意到了......例如,做这样的事情:

如果输入是“KeyA”,然后是“KeyB”,则两者都将“KeyB”作为存储桶键。同样的事情适用于值而不仅仅是键,因为它们基本上是相同的类型,因为我想让我的代码完全模块化,适用于任何数据类型。

我怎么能解决这个问题?

我的第一个想法是使用strdup(str)并将其传递给hashInsert函数。那将解决问题。由于这是在主代码中处理的,因此我也可以轻松地将malloc()其用于需要作为值传递的任何其他数据类型(键可能始终是字符串或 int)。

但是这个解决方案带来了另一个问题......

2)我应该如何释放这个分配的内存?当然,它是由“主程序员”而不是“哈希表模块程序员”分配的,所以“主程序员”应该在主代码中释放它,对吧?但是,对我来说,这看起来不像模块化代码。

我的代码还有一个hashDestroy功能,可以释放所有分配的内存。但是我怎样才能使用这个功能来释放一切呢?我不能只遍历每个键/值并free()在它们上使用,因为它们中的一些可能一开始就不是malloc'd任何程序员的,我不需要释放它们。

我怎样才能知道哪些是我hashDestroy必须免费的,哪些不应该?

3)最后,我想我也可以把这个问题混在一起......在第一点,我的建议是使用strdup()malloc“修复”那个特定问题(同时引入另一个问题),但这看起来也不是很模块化大部头书。这种内存分配应该在哈希表模块代码中完成,而不是由“主程序员”在主代码中完成。

你建议我如何解决这个问题?我的意思是,数据类型可以是任何东西,虽然使用strdup()有很大帮助,但它只适用于字符串。如果我需要为某些特定结构或只是一个 int 分配内存怎么办?

很抱歉这篇大文章,但我认为这些问题都是相关的,我需要一些帮助来弄清楚它们,因为我的 C 知识并不是那么极端。我最近才知道void*所以...

0 投票
5 回答
113 浏览

c++ - 我喜欢有免费的跨平台网络/线程/xml静态库吗

在 windows express vs 2008 编译器中使用简单并且在编译时没有问题的最好的 c++ 库是什么?最好为每个目的使用不同的库还是使用一个通用库?

0 投票
6 回答
41428 浏览

c++ - C++ 释放静态变量

我希望我的类有一个指向动态分配的内存区域的静态指针。我了解如何初始化它 - 在我的情况下,我将在第一个对象需要它时对其进行初始化。但是,我不知道代码中何时/何地释放它。我想在程序终止时释放它。

我可能能够释放对象析构函数中的指针,但是我必须维护一个对象计数,以查看当对象是最后一个使用的对象时释放是否安全。

有没有更优雅的方法来做到这一点?

请告诉我。

谢谢,jbu

0 投票
8 回答
14858 浏览

c - 释放指针和将其分配给 NULL 有什么区别?

有人可以告诉我两者之间的区别:

或者

0 投票
2 回答
300 浏览

c++ - c++ free(none gpl) webservice框架

我正在寻找不是 GPL c++ webservices 框架的好的免费软件我使用过 AXIS2 但它对我们的需求没有好处,是否有任何好的框架可以像 gSoap 这样既好又健壮

0 投票
8 回答
23129 浏览

c - C 编程:循环内的 malloc 和 free

malloc()我刚开始使用 C 并且对和的性能问题知之甚少free()。我的问题是:如果我要在一个循环内调用malloc(),然后free()在一个while循环内调用,比如 20 次迭代,与在循环free() 外调用相比,它会运行得更慢吗?

我实际上是使用第一种方法为缓冲区分配内存,从文件中读取可变长度字符串,执行一些字符串操作,然后在每次迭代后清除缓冲区。如果我的方法导致大量开销,那么我想寻求一种更好的方法来实现相同的结果。

0 投票
9 回答
16414 浏览

c++ - 两次释放内存

在 C 和 C++ 中,释放 NULL 指针将导致什么都不做。

尽管如此,我还是看到人们说如果您“释放内存两次”,可能会发生内存损坏。

这是真的?当您两次释放内存时,幕后发生了什么?