问题标签 [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自由问题
在c中可以这样做吗?
c - 堆和免费作业
我把这个贴在这里作为最后的手段。我完全被卡住了,不知道该去哪里。带着这个问题,我在寻找方向而不是答案。
我有一个家庭作业,实际上似乎是一个很常见的作业。问题在第 11 页。这不是我的任务,但它是我在 Google 上找到的与我非常相似的任务。
我的导师给出了我们需要查看的相关信息是标题位的指导。
假设我们正在执行以下操作:free(0x400b010)
0x400b010
包含0x400b601c
.
如果我将此十六进制分解为二进制 - 特别是最后一个双字,我会得到以下信息
整个事情:
据我所知,1c
这表明该内存已经空闲。因为最后一位是 0。在这种情况下,free 的行为将是未定义的。
但我的火车虽然准确吗?我什至把这个带向了正确的方向吗?
c - free() 错误(使用 valgrind 调试)?
我有这些结构:
然后我创建了一个数组
在程序结束时,我想释放内存,函数是:
如果我使用 valgrind 调试它,valgrind 会说:
请帮我解决这些错误,谢谢。
c - C内存管理错误?
这是我的 C 程序:
当我用 gdb 调试它时,错误消息是:
valgrind 消息如下:
请帮我修复它们,谢谢。
c - strtok 和内存泄漏
我使用 strtok() 编写了一个简单的 url 解析器。这是代码
如您所见,我经常使用 strtok() 以便可以“切片”网址。我不需要支持不同于 http 或 https 的 url,所以它的完成方式解决了我的所有问题。我担心的是(这是在嵌入式设备上运行的) - 我在浪费内存吗?当我写类似的东西时
然后稍后调用
我的第一个指针 ret->protocol 是否保留在内存中?我想也许我应该将第一次调用设置为 tmp 指针,调用 strtok 将 ret->protocol 指向字符串的右侧部分(第二次调用),然后再调用 free(tmp)。
使用 strtok 的最佳方法应该是什么?
c - 免费如何知道要免费多少?
在 C 编程中,您可以将任何类型的指针作为参数传递给 free,它如何知道要释放的已分配内存的大小?每当我传递一个指向某个函数的指针时,我还必须传递大小(即一个包含 10 个元素的数组需要接收 10 作为参数才能知道数组的大小),但我不必将大小传递给免费功能。为什么不呢,我可以在我自己的函数中使用相同的技术来避免我需要围绕数组长度的额外变量进行购物车吗?
c - C 谁能告诉我这里发生了什么?
我无法弄清楚这里到底发生了什么。我期望的是输出应该说键中只有 1 个元素,当我只分配 120 字节的 0 位置时,它说有 7 个元素。
输出:这里\一\二\三 0 1 2 3 4 5 6 7 那里\一\二\三 0 1 2 3 4 5 6 7
字符串和我期望的一样,但是我认为之后应该只打印 0,因为 0 是我添加的唯一元素。我需要能够释放每个位置,而不仅仅是 free[0],但是当我将 free[i] 放在打印出 i 的 for 循环中时,它会堆栈转储。
关于下面响应的初始化,如果我需要一个类似于 1000 而不是 2 的数组,那么如何在不输入 1,000 个 0 的情况下将它们全部初始化为 0
c - 多维字符数组?
我想做的是创建一个二维字符串数组以下段错误立即出现,有什么问题?
c - 在 C 中释放()一个 malloc 的二维数组的最佳方法
假设我有一个用这样的东西创建的二维数组,
首先,这甚至是创建这样一个数组的正确方法吗?这里的问题是,“高度”和“宽度”是在运行时设置的。
这似乎可行,但这是释放这个二维数组的最佳策略。免费(真菌)听起来不对。通过这里的其他一些帖子,我想我会一一释放每一行?
我确实尝试过这样的事情,
然而,这给了我一个双自由指针异常。这是否意味着,我不必管理这块内存?我的印象是,对于每个 malloc 的内存,我们都应该调用 free()。
c - 在分配的字符串上使用 strtok()?
关于在 malloced 字符串上使用 strtok 有什么我应该知道的吗?
在我的代码中,我有(一般而言)
wheregetline()
是一个将 char * 返回到某个 malloced 内存的函数。并且Parse(dest, line)
是一个在线解析的函数,将结果存储在dest
, (之前已经部分填充,来自其他信息)。
Parse()
在线调用strtok()
可变次数,并进行一些验证。每个令牌(一个指向返回的指针strtok()
)都被放入一个队列中,直到我知道我有多少。
然后将它们复制到 dest 中的 malloc'd char** 上。
现在free(line)
还有一个释放 dest 中 char*[] 的每个部分的函数,两者都出现在 valgrind 上:
“地址 0x5179450 是一个大小为 38 的块内的 8 个字节 free'd”
或类似的东西。
我正在考虑重构我的代码,不要直接将令牌存储在 char** 上,而是存储它们的副本(通过将空间 == 分配给 strlen(token)+1,然后使用strcpy()
)。