Questions tagged [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.

Filter by
Sorted by
Tagged with
0 投票
3 回答
2468 浏览

编译自定义 malloc

我编写了一个自定义库,它使用标准 C 原型实现了 malloc/calloc/realloc/free,并且我想出了如何将它编译为 so。我想通过链接标准应用程序来测试库?什么是这样做的好方法?一旦我有了一个工作库,我假设我可以使用 LD_PRELOAD 加载它,但是如何让我的函数与系统库共存但优先于系统库的函数?我的函数需要调用 malloc 才能让内存运行,所以我不能完全放弃 stdlib... 帮助?

0 投票
2 回答
724 浏览

Valgrind 缩进(及以下主要)

这是一个项目的 valgrind 输出:

Address与以 开头的行相比,以 开头的行缩进一个空格Invalid。这是否意味着一个导致另一个?或者他们是分开的?

如果是分开的,by 0x5A6F4D2: (below main) (libc-start.c:226)从哪里来?我觉得(below main)这与它有关,但我在硬盘驱动器上的任何地方都找不到 libc-start.c。

0 投票
8 回答
8402 浏览

为什么使用 realloc() 时会出现双重释放或损坏错误?

我尝试在 C 中编写一个字符串替换函数,该函数适用于char *已使用malloc(). 它有点不同,它会查找和替换字符串,而不是起始字符串中的字符。

如果搜索和替换字符串的长度相同(或者替换字符串比搜索字符串短),这很简单,因为我分配了足够的空间。如果我尝试realloc()使用realloc().

也许一些代码会有所帮助:

该程序有效,直到我尝试realloc()在替换字符串比初始字符串长的情况下。(它仍然有效,它只是吐出错误以及结果)。

如果有帮助,调用代码如下所示:

0 投票
6 回答
422 浏览

下面的内存分配有什么不同吗?

动态分配内存有四种方式,这四种方式有区别吗? 首先像这样:

第二个是这样的:

第三个是这样的:

第四个是这样的:

你应该知道,我将在方法“exam”之外使用变量“seq”。 请解释一下上面的代码,非常感谢。

0 投票
1 回答
1251 浏览

Malloc 在 64 位 Ubuntu 机器上失败

我在具有 18 GB RAM 的 64 位 Ubuntu 机器上运行以下代码,如您所见,当我尝试分配 2^31 字节时,我对 Malloc 的调用失败。我不确定为什么会发生这种情况,或者如何解决它(我已经尝试过编译器标志和 calloc())。我想知道是否有人可以向我解释为什么我无法在 64 位机器上分配更多空间以及如何解决此问题。

输出:

更新:

我发现了我遇到的问题:我目前在 64 位 Ubuntu linux 发行版上的 EC2 上运行我的代码,而 EC2 上的默认 linux 框有 0 个交换空间。这导致我的进程在请求比物理 RAM 更多的内存时出现段错误,因为它无法分页。创建交换文件后,我的问题就消失了。

谢谢你的帮助

0 投票
2 回答
154 浏览

在运行时在 C 中声明和初始化类数组

好的,首先我将从一些背景开始。我正在为一个涉及客户端和服务器的类项目工作。它们是两个独立的进程,通过我们所说的请求通道相互通信。

客户端收集有关请求数量、请求通道缓冲区大小以及发送请求的工作线程数(分别为 -n、-b 和 -w)的命令行参数。

用户想要多少个工作线程就是我必须在客户端和服务器之间创建多少个请求通道。

我的malloc行出现编译错误,我不知道问题是什么。我只想能够访问每个RequestChannellike channel[i]

现在的方式,我收到一条错误消息

void*从到 的无效转换RequestChannel*

当我替换sizeof(RequestChannel)with 时sizeof(*RequestChannel),我收到一条错误消息

')' 标记之前的预期主表达式。

0 投票
3 回答
332 浏览

C 指针数组和 malloc

我正在尝试使用指针从存储到数组中的 std 获取数据。main 将 d 声明为int *d;并使用调用该函数x = getdata(&d);当我使用 gdb 逐步执行它时,它在 for 循环的第一次迭代中死亡,当它尝试 *d[i]=val;

}

0 投票
2 回答
1152 浏览

在 parallel_for 循环中为每个线程分配内存

我最初有一个单线程循环,它遍历图像的所有像素,并且可以对数据进行各种操作。

我使用的库规定必须一次一行地从图像中检索像素。为此,我malloc有一块内存可以容纳一行像素(BMM_Color_fl是一个包含一个像素的 RGBA 数据作为四个浮点值的结构,并将GetLinearPixels()一行像素从位图中复制到BMM_Color_fl数组中。)

到现在为止还挺好!

为了减少这个循环的执行时间,我用 编写了一个并发版本parallel_for,它看起来像这样:

虽然多线程循环已经比原来快了,但我意识到不可能所有线程都使用相同的内存块,所以目前我在每次循环迭代时分配和释放内存,这显然是浪费,因为永远不会有更多线程比循环迭代。

我的问题是我是否以及如何让每个线程malloc恰好有一个行缓冲区并重复使用它(理想情况下,最后释放它)?

  • 作为免责声明,我必须声明我是 C++ 新手。

实施建议的解决方案:

如建议的那样,我将其装罐malloc并用vector+替换了它reserve

0 投票
4 回答
611 浏览

Malloc() 的奇怪副作用

所以我正在为一个简单的 shell 编写一个 C 程序。不太难,但我遇到了一个我无法解释的非常奇怪的问题。我正在尝试在结构中创建一个二维数组来表示命令及其参数。例如,对于命令“ls -l”,我想要第一个元素“ls”和第二个“-l”。除了 malloc 将“ls”更改为“ms”之外,似乎工作正常。其他命令也一样,第一个字符递增;不是在 malloc 之前和之后。

这是有问题的代码块......

我试图完成的只是分配一个 3(-l + null)字符数组来保存 args[1] 中的“-l”。这些也不会真正被硬编码,但我认为它使这一点更好。

输出产生了它......

PRE MALLOC: l

[0] 80613b0

[0] 80613b0

[1] 80613b8

后 MALLOC:米

所以这两个地址没有重叠或任何奇怪的东西,但第一个数组的第一个字符增加了?如果我忽略了一些愚蠢的事情,我很抱歉。但我想不出为什么会发生这种情况。

有任何想法吗?

谢谢,

对于某些上下文,这里有更多代码。

0 投票
4 回答
417 浏览

malloc 在 do while 块中

我可以将 malloc 放在 do...while 块中以确保成功分配吗?

像:


15 30 50 per page
1
2 3 4 5
1498226