问题标签 [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.
c++ - 在 C++ 中分配和释放 char *
大家好,我遇到了一个我无法弄清楚的堆损坏错误。
上面的代码是我唯一一次在 _gcvt_s 和 pushFont() 中使用 c 指针,它只接受一个 char * 作为它的第一个参数,并将文本放在屏幕上。除此之外我不使用c。当我尝试在主循环之后释放 c(我认为我应该这样做)时,我收到一条错误消息,指出 Visual Studio 已获得堆错误(堆损坏)。
注释掉对 pushFont 的调用我仍然收到错误。
谁能向我解释为什么释放一个字符(我在堆上分配的 1 个字节)会给我一个堆损坏?
最后,我的主循环做了很多事情,我和一个伙伴正在用 WinSocket 制作乒乓球游戏,主体的其余部分是游戏的循环。我认为没有必要发帖,但如果有必要,我会用整个主循环更新我的帖子,但我相信我对 malloc() 和 free() 的理解刚刚结束。
谢谢大家,
c - 释放从 C 函数返回的内存
在 C 中,在释放从函数返回的内存时,这是更好的做法:
- 提供一个“析构函数”来封装对 free() 的调用。
- 要求用户自己 free() 返回的指针。
例如,要打开和关闭文件,我们这样做:
这是否更可取:
警告:不要在 FILE 指针上调用 free()。我在这里只使用它一个假设的实现。
那么局部变量指向返回内存的情况呢?free() 在这里有害吗?(或者也许永远不应该这样做)
c - 在 C 中释放内存时出错
我写了一个练习指针和分配内存的问题。
但是,当我释放内存时,我得到了一个堆栈转储。我在正确的地方释放了吗?我的程序是否还有其他问题可能使其不安全?
c - 释放后将变量设置为NULL
在我的公司有一条编码规则,即在释放任何内存后,将变量重置为NULL
. 例如 ...
我觉得,在上面显示的代码这样的情况下,设置为NULL
没有任何意义。还是我错过了什么?
如果在这种情况下没有任何意义,我将与“质量团队”一起将这个编码规则删除。请指教。
c - 当 malloc/free 出现在 C 中的循环中时出现分段错误
我有一个基本上看起来像这样的程序:
这只是骨架形式,但它希望能提供足够的图片。无论如何,它通常运行良好,但对于 n1、n2 的某些值,free(cpplptr) 似乎会导致分段错误。它只被调用一次,我在 malloc() 调用 cplptr 之后和 cplptr 的相应 free() 之前检查地址。
地址匹配,这意味着 free() 应该释放它应该释放的东西,对吧?gdb 给出程序接收到的信号 SIGSEGV,分段错误。0xb7ce179b 在?? () 来自 /lib/tls/i686/cmov/libc.so.6 和步骤找不到当前函数的边界
有没有另一种方法来实现类似的东西来避免分段错误?
感谢一百万您的建议!知道发生了什么吗?
c++ - C++ 动态内存细节
我是一名 C 和 Java 程序员,所以内存分配和 OOP 对我来说并不是什么新鲜事。但是,我不确定如何准确地避免 C++ 对象实现的内存泄漏。即:
s2
现在有一个新的字符串对象,所以它必须通过以下方式释放:
对?
此外,我是否正确地假设我必须删除函数返回的任何(新)对象的地址,而不管返回类型不是指针或引用?生活在堆上的对象在必须被释放时不会作为指针返回,这似乎很奇怪。
c - 为什么在释放指针后取消引用指针会得到不同的结果?
我对 C 中的内存管理(以及 Debian GNU/Linux 下的 GCC 4.3.3)有疑问。
根据 K&R 的 C 编程语言书(第 7.8.5 章),当我释放一个指针然后取消引用它时,是一个错误。但是我有一些疑问,因为我注意到有时,就像我在下面粘贴的源代码中一样,编译器(?)似乎按照明确定义的原则工作。
我有一个像这样的简单程序,它显示了如何返回动态分配的数组:
如果我尝试用一些参数编译它:-ansi -Wall -pedantic-errors
,它不会引发错误或警告。不仅; 它也运行良好。
*(p+4) 是 8 而 *x 是 0。为什么会这样?如果 *(p+4) 是 8,那么 *x 不应该是 6,因为 x 数组的第一个元素是 6?
如果我尝试将调用的顺序更改为免费,则会发生另一件奇怪的事情。例如:
事实上,在这种情况下,输出(在我的机器上)将是:
为什么x指针真的被“释放”了,而 p 指针被释放(我希望)“不同”?好的,我知道在释放内存后我应该让指针指向 NULL,但我只是好奇:P
c++ - malloc() 和 free() 是如何工作的?
我想知道如何malloc
工作free
。
如果可能的话,如果答案在记忆水平上是深入的,我将不胜感激。
c++ - 免费的 SVN repo 服务器,无需项目
我想知道是否有任何免费的 Subversion 存储库托管服务器,您不需要有一个“项目”来托管您的 C++ 文件。
我没有实际项目,但我想将我的 C++ 存储在 SVN 存储库中。我正在寻找类似OpenSVN的东西,您可以在其中上传您的 C++ 文件,但它需要您有一个项目。
您能否推荐一个 Subversion 托管服务,您可以在其中将文件上传到帐户而不是项目。就像是:http://www.test-svn.com/~nathanpc/
c++ - 如何防止无意中在 C++ 中交替使用 delete 和 free?
何时(如果有的话)可以在 C++ 中互换使用delete
?free
我的担忧如下:假设malloc
/free
和
new
/的使用有不正确的混淆delete
(更不用说new[]
/了delete[]
)。但是delete
,free
做同样的事情;
幸运的是,这在测试中没有被发现。稍后这可能会导致生产崩溃。
我怎样才能执行某种检查来防止这种情况发生?如果两者混淆了,我会被警告吗?如果不是在编译时,也许是在运行时进行一些代码检测?我将如何处理这个?
这个问题的目的是找到避免无意中混淆用法的方法。