问题标签 [strdup]

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 投票
0 回答
78 浏览

mmap - strdup 后 mmap 中断

我用 mmap 尝试了以下配置:

  1. 打开文件(文件超过 2 kB)
  2. 从文件 *f_file* 请求统计信息
  3. 映射文件(文件小于一页,偏移页0,大小为预期大小)
  4. 验证地图 *f_fpage* 中 *f_footer* 的值
  5. 使用 strdup

代码:

我使用读/写,文件填充为零,最大为 2 Kb。我使用文件大小和零页面大小对mmap进行了参数化,但mmap无法映射文件。

要映射的文件是否应该具有其他属性?

一旦我想从头开始映射文件,“0”是否是可接受的参数作为 mmap 中的偏移量?

0 投票
2 回答
377 浏览

c++ - 使用 strdup 时 std::find 不起作用

我正在使用astd::vector来存储一些字符串,后来我尝试了std::find它们但通过strdup传递,如示例代码所示,它不起作用,std::find最后返回,这意味着它没有找到字符串,但我可以看到它是在那里,当我通过该std::vector::at功能访问它时,它会正确显示。问题是什么?

0 投票
2 回答
569 浏览

c++ - 当 StrDup 处于 while 循环时,如何同时使用 Malloc 和 StrDup?

我这里有一个代码。我正在使用 malloc 为我的结构分配内存。该结构的一个成员在 while 循环中使用 StrDup 分配了一个字符串,尽管其他成员不必更改它们的值。现在,当我使用 StrDup 时,我必须清理内存,否则会出现内存泄漏,但内存清理会破坏我的 struct malloc。我该怎么办?提前致谢。

0 投票
4 回答
7928 浏览

objective-c - Obj-C:strdup 帧中 Malloc 48 字节的内存泄漏

在我的应用程序中,我收到了多个内存泄漏。该对象是 48 字节的 Malloc,它始终源自负责的调用者 strdup。对象的历史只显示它被 Malloced,没有其他保留或释放。堆栈跟踪没有显示我的任何代码。我能挑出的唯一相关点是:

它似乎在地图视图上滚动时发生,但我不确定如何继续,因为堆栈中没有引用我的代码。我应该如何继续诊断这种泄漏?

如果需要任何进一步的信息,请告诉我。

问候,尼克

0 投票
3 回答
3376 浏览

c - 当 strdup 函数失败时?

我有以下使用 strdup 函数的代码

它成功地显示了源字符串,但我很感兴趣它在哪种情况下失败以及它在日常问题中的使用效果如何?我知道它是由 strdup 决定的

如果我们的字符串不为 NULL,是否有可能导致 strdup 函数失败?

0 投票
1 回答
1050 浏览

c - Ubuntu 上的 strdup() 崩溃

当我尝试在 Ubuntu 上运行时,我的 C 程序出现分段错误。这是堆栈跟踪。感谢任何帮助

这是崩溃的功能

0 投票
1 回答
778 浏览

iphone - “strdup”泄漏 - 未知原因

使用 Instruments 检查我的代码是否泄漏,我发现一个我无法找出解决方案的出现。是这样的:

Malloc 48 字节负责库 - libsystem_c.dylib 负责框架 - strdup

我在谷歌上搜索了这个,一些建议告诉人们不要管它,但提交给 Apple 泄露似乎是一件愚蠢的事情,所以我想看看是否有人能告诉我更多关于这个的信息,或者它可能在哪里来自(哪里?

0 投票
1 回答
625 浏览

c - 使用相同的左值多次调用 strdup()

在我从前辈那里继承的程序中,有以下格式的函数:

换句话说,最后一个参数是 a char **,用于返回消息。即:somefunc()会“变” msg。在某些情况下,所讨论的变化是以下形式:

我知道每次调用都strdup()应该有一个相关的调用free()来释放它分配的内存。

由于该内存用于返回某些内容,因此显然不应在somefunc().

但然后在哪里?

如果使用相同somefunc()的消息多次调用,那么该指针将四处移动,我想。那么之前调用分配的空间会丢失,对吧?

我当然应该在程序结束之前的某个地方free(*msg)。(在这种情况下*msg,是在调用中用作参数的版本somefunc()。)但我认为该调用只会释放最后分配的内存,而不是在早期调用中分配的内存somefunc(),对吧?

那么,我是否正确地说somefunc()应该如下所示:

所以用free() 之前strdup().

我对么?

0 投票
1 回答
832 浏览

c - 指向带有 malloc 和 strdup 的结构的指针

我的主要目的是将一个指向结构的指针传递给一个函数,该函数将分配内存并填充其所有值。回来后我会在屏幕上打印出来。

结构看起来像这样。

请注意,我无法更改此结构的声明。我的主要功能就是这样非常简单。

}

fillArray 函数假设为我的结构分配 n + 1 个内存块,其中 n 是存在的实际锁数。而最后(n+1)个块将用零填充。因此,在从 main 打印时,我可以检查这种情况,而无需担心我分配的结构的长度。

我的问题出在 fillArray 函数中。

实际上这个 LINE100 会导致问题。它实际上替换了已经填充的结构条目,即这一行使 dlock[0]->name 填充为 0。而 dlock[1] 保持不变。

我的 gdb 日志显示类似这样的内容。

所有这些都是在分配和填充值之后获取的日志。

从注释 1 和注释 2 可以清楚地看出,strdup 已通过 malloc 返回已分配的内存位置,即第一次调用 strdup 已返回 dlock[2] 的地址。这怎么可能发生。因此,(*dlock+2)->name = 0 导致 dlock[0]->name 被填充为 0。

为了方便解释这个问题,Malloc 给我回了三个地址。为了便于理解,可以说,{1000,1008,1010} 我调用了两次 strdup,它返回了 {1010,1018}

这 1010 和 1018 分别存储在 char *name of lock[0] 和 lock[1] 中。

有人可以告诉我,我在这段代码中做错了什么还是 strdup 的问题(分配了一个已经分配的内存块)

注意:当我将 char *name 更改为 char name[20] 而不是 strdup 时,我使用了 strcpy,它运行良好。

0 投票
1 回答
1433 浏览

c - Linux 上的 strdup 使用了哪个宏?

我已经在 StackOverflow 上的代码示例中看到了 strdup,并且刚刚尝试在 Linux(3.0.0-21-generic x86_64)上使用它。

编译器(clang)知道它在 string.h 中,但仍然抱怨即使包含 string.h 也没有原型。事实证明,strdup 包含在 string.h 中定义的 #if 中。我搜索了这个站点,发现一个帖子说 strdup 是POSIX例程,而不是 C 标准库例程。

可能会暴露它的宏是

  • __USE_SVID
  • __USE_BSD
  • __USE_XOPEN_EXTENDED
  • __USE_XOPEN2K8

这些中的每一个都未在包含在 stdlib.h 中的 features.h 中定义。

为什么该列表中没有 POSIX 宏以及人们使用哪个宏/编译器开关来公开 string.h 中的 strdup?

编辑:根据吉姆在下面的评论,我发现

或者

多于

不要在我的系统上公开 strdup。

但这些确实:

编辑2:根据基思的评论,我发现这也有效:

编辑3:根据乔纳森的评论,这些也有效