问题标签 [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.
c - 如何解除strdup引起的泄漏?
基本上这个程序读取行,然后按字典顺序打印出来。
我看到使用 strdup(buffer) 导致泄漏,我没有释放它。
当我发表声明时
免费(tmp->项目)
,它表明不可能有泄漏。但它不会给出正确的输出。我应该如何处理这种泄漏?
c++ - Bison/Flex 在哪里释放内存?
我正在使用 Bison & Flex 或多或少 1 个月,所以如果我没有看到明显的东西,我很抱歉(但我认为不是)。
我有一个关于使用 Flex Bison 释放内存的问题。这是我的代码的样子:
这是我的 .l 文件的示例之一。我将 yytext 的值复制到 yylval.str 中。然后我使用该内容(实际上是键/值)创建一个新对,然后返回野牛的令牌日期。我的解析器 .y 不超过 yyparse;当有东西被捕捉到时,它就会打印出来。
我试图对此运行 valgrind,但我有多个关于 strdup 的错误。我知道这个函数使用 malloc,但我不知道何时何地使用 FREE。
我可能猜它在 .y 文件中,但在哪里?
我真的不明白这一切,我真的很感激一个简单而清晰的解释。
提前致谢,
编辑:
我尝试了几件事,例如:
好像编译执行不错,但是valgrind还是跟我说strdup函数中包含的malloc有问题。但是我不能在 flex 文件中写 free(yylval.str) ,否则,bison 将不知道该值(如果我理解正确,我试过它不起作用)。我真的不知道如何解决这个泄漏问题。
c++ - 从返回类型为 char * 的函数返回 strdup 的风险?
如果我想从返回类型为 char* 的函数中返回 strdup,那么内存泄漏的风险或机会是什么?
c - 消失的弦
这是我在这里的第一篇文章,所以我提前感谢大家的任何和所有帮助。
我遇到了信息消失的问题。该程序应该从文件中读取书名和图书馆 ID 号,创建一个链表哈希表,其中每个节点包含一个包含书名的书结构和另一个带有图书馆 ID 的链表被发现。此时我只是想填充哈希表,但由于某种原因,我的标题值正在消失。文件格式如下图所示:
2345、老人与海
567434、哈利波特
1233、学习的艺术
等……
我有
实际上有四个 fscanf 参数 %d 用于 libID,%*c 跳过“,”,另一个 %*c 跳过“”,以及 %[^/n] 读取标题直到读取换行符。不久之后的打印语句确认了 libID 和标题中的正确值。在 printAll(H, numslots) 处,所有值都存在,在返回 NodePtr S = searchTitle(H[index], title) 时,标题消失了。下面是我的 newBook 和 searchTitle 函数
c++ - C++ 将分配的 char* 释放到字符串中
我试图找到答案,但看不到任何直接的东西。
如何在下一个代码段中释放分配的内存:
const char* attStr = strdup(OtherCharStr);
string str(attStr, strlen(attStr));
delete str; //???
c - 我应该在 C 中的 basename/dirname 之后释放 strdup 指针吗?
我想使用 POSIX 的basename
功能(而不是 GNU 的)。
从手册页:
dirname() 和 basename() 都可以修改 path 的内容,因此在调用这些函数之一时可能需要传递一个副本。
这些函数可能会返回指向静态分配内存的指针,这些指针可能会被后续调用覆盖。 或者,它们可能会返回指向 path 某些部分的指针,因此在不再需要函数返回的指针之前,不应修改或释放 path 引用的字符串。
它还说:
返回值
dirname() 和 basename() 都返回指向以空字符结尾的字符串的指针。(不要将这些指针传递给 free (3)。)
因此,该示例建议如下:
例子
( strdup
)strndup
手册页说:
新字符串的内存使用 malloc(3) 获得,并且可以使用 free(3) 释放。
所以问题是:我应该释放 dirc 和 basec(根据strdup
)还是不释放(根据basename
)?
c - 在 while 循环中的 Free()
我正在尝试运行这个程序,其中创建一个字符数组并动态分配内存。稍后,数组元素将填充 10 个连续位置的字符串“hello”。使用 strdup() 函数调用将值分配给字符串元素。
一旦分配了所有元素,这些元素就会在 while 循环中释放。当我在 Visual Studio 中运行程序时,程序在最后一个指向 char 数组的指针被释放后崩溃。我相信 while 循环的终止条件是正确的。但我无法确定究竟是什么导致了这个问题。
代码:
c - strdup():对警告感到困惑('隐式声明','使指针......没有强制转换',内存泄漏)
当我编译下面的一小段代码时(我们在其中定义了一个字符串,然后使用 strdup 进行复制),我收到 3 个警告:来自 GCC 的 2 个编译器警告和来自 valgrind 的 1 个运行时警告/错误。
我怀疑内存泄漏错误(由 valgrind 报告)也与我对 strdup 的使用有关,这就是我在下面包含相关输出的原因。
我究竟做错了什么?(我正在阅读一本 C 书,这就是作者使用 strdup 的方式。)
编码:
警告/输出:
memory-leaks - Valgrind Memory Leak in strdup
I am doing a small Project. I am checking about memory leaks using the tool Valgrind. When I use this tool, I got the bellow information.
These are the codings I have used the function strdup. I have used in LEX code.
I don't know in which point the memory has been leaked.
c - 如何避免“需要非空的空参数”编译器警告
编译以下代码:
导致以下编译器警告:
但是,如果是因为检查,strdup
则不会被调用。有什么办法可以避免这个警告?FOO
NULL
if (FOO)
谢谢!