问题标签 [malloc]

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 回答
1683 浏览

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

0 投票
1 回答
4214 浏览

c - malloc.c:3074 错误?

我在写C程序的时候遇到了一个问题,如下:

malloc.c:3074: sYSMALLOc: 断言 (old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk , fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof (size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0) 失败。

请帮我解决它,在此先感谢!

0 投票
4 回答
1675 浏览

c - 为什么编译器假定 malloc 返回一个 int?

我知道在 C 语言中,最好不要将malloc(). 我读过编译器假定malloc()如果您不包含,则返回一个 int stdlib.h。当然,如果您尝试将 int 隐式分配给不是 int 的东西,则会产生错误,但是该错误可能会被显式强制转换所掩盖——因此存在显式强制转换的危险malloc()

对于我创建的任何函数,如果该函数不存在,那么编译器会告诉我。为什么编译器假设malloc()返回 int 即使你没有 include stdlib.hmalloc()在包含之前不应该保持未定义stdlib.h吗?

0 投票
6 回答
1478 浏览

c - C malloc:莫名其妙的内存使用

当我编译并运行以下代码时:(在 cygwin 上使用 gcc)

Windows XP 中的任务管理器显示此进程的内存使用量为 2232K,据我说应该在 400000K 左右。

当我编译并运行以下代码时:(在 cygwin 上使用 gcc)

内存使用量下降到 1388K;

因此,它实际上并没有显示出增加,而是显示出下降。

这有什么可以解释的?

0 投票
3 回答
4186 浏览

iphone - 仪器(泄漏)和 NSDateFormatter

当我使用 Instruments Leaks 运行我的 iPhone 应用程序并使用 NSDateFormatter 解析一堆 NSDate 时,我的内存增加了大约 1mb 并保持不变,即使这些 NSDate 在解析后应该被释放(如果它们不是新的,我只是丢弃它们)。

我认为 malloc(在下面我最重的堆栈跟踪中)可能成为 NSDate 的一部分,但我也认为它可能是仅在解析的某个中间步骤期间使用的内存。有谁知道它是哪一个或如何找出来?

另外,有没有办法在 NSDate dealloc 上设置一个断点来查看该内存是否真的被回收了?

这是我的日期格式化程序解析这些日期的样子:

这是当内存上升并停留在那里时最重的堆栈跟踪:

谢谢!

0 投票
13 回答
171685 浏览

c++ - malloc() 和 free() 是如何工作的?

我想知道如何malloc工作free

如果可能的话,如果答案在记忆水平上是深入的,我将不胜感激。

0 投票
4 回答
4891 浏览

c - 结构初始化问题?

我正在使用这样的结构:

我想初始化结构,并使用 malloc() 方法返回这样的动态内存

然后我会像这样使用片段指针:

然后当我返回很多片段时就会出现问题。错误消息说(使用 valgrind 工具):

谁能告诉我如何处理它。谢谢你!

0 投票
5 回答
22987 浏览

c - Malloc、字符串指针和 Valgrind

我的程序是这样的(main.c):

我使用工具 valgrind 进行调试,它说($:valgrind --tool=memcheck --leak-check=full --track-origins=yes ./main):

谁能告诉我为什么以及如何解决它。

0 投票
4 回答
15868 浏览

c - 使用 fread() 和 fseek() 在 C 中读取文件的一部分

我正在尝试以块大小BLOCK_SIZE(当前等于1000 unsigned chars)将文件读入缓冲区。我的代码最初找到它必须读取的块数才能读取整个文件(通常是 2-4),然后遍历一个 for 循环读取文件(忽略“ +17+filenamesize”的东西,这都是以后需要的该程序。

但是,只有在第一次时j=1,它才会真正将数据放入buf数组中。在其他情况下,当j != 1,strlen(buf)返回0

fseek()我认为问题在于在读取文件之前使用寻找文件的第二部分或内存分配问题。

任何帮助将不胜感激让它将文件的1000-1999第 th 个字符读入buf数组。

附上代码的相关部分:

0 投票
5 回答
7530 浏览

c++ - 如何从消息队列接收动态长度数据?

我必须使用 SysV 消息队列为大学项目发送和接收动态数据。

数据的长度在单独的消息中传输,size因此是已知的。

这就是我尝试接收数据的方式。我不得不承认我不是 C++ 专家,尤其是在内存分配方面。

问题似乎是malloc电话,但我不知道如何正确地做到这一点。

编辑

我尝试的是在消息队列周围的 OO 包装器中使用某种读取方法。我想将消息队列中的数据读入 achar[]或 a std::string。我现在看起来(简化)是这样的。

我得到的只是分段错误或完全损坏的数据(尽管这些数据有时包含我想要的)。