【发布时间】:2014-04-22 05:18:34
【问题描述】:
LibAIFF 库中有这个函数:
AIFF_Ref AIFF_OpenFile(const char* name, int flags);
它接受 const char* 但对于我的使用,名称必须是 char* 类型,因为我需要根据我的 AIFF 文件在我的目录中的位置来构建它(我可以正确完成) - 特别是,在我的例子中,名称是 AIFF 文件路径。
但我认为我因此遇到了一些问题(虽然我不确定)。当我向函数发送char* 时会发生什么?我注意到的不良行为发生在关联的AIFF_CloseFile 函数中,该函数遇到了一些问题,这些问题似乎是基于我发送给它的文件路径随机出现的。例如,如果我有完全相同的 AIFF 文件,其中两个名称仅更改了一个字母,则错误(这与 AIFF_CloseFile 试图释放在已释放或尚未释放的结构中定义的缓冲区有关) '未分配)发生在其中一个而不是另一个。如果我注释掉对关闭文件函数的调用,则一切正常,因为 AIFF 文件已成功打开并读取,但我不应该这样做。
任何帮助将不胜感激。谢谢
【问题讨论】:
-
const仅表示AIFF_OpenFile()承诺不会更改输入字符串,这不是您的问题。尝试提出一个新问题,包括有问题的代码和更详细的问题示例,并给它一个合理的标题(“AIFF_CloseFile() 中的崩溃”或其他什么)。 -
这是有用的信息。谢谢。不幸的是,涉及到许多与我面临的问题相关的功能,我不太清楚如何提出这个问题。
-
在文本编辑器中打开您的源文件,选择代码的相关部分,复制到 Stack Overflow 问题文本框。添加解释出了什么问题,并带有具体示例(输入文本文件名,究竟是什么错误,...)。理想情况下,包括来自调试器的回溯,显示错误的来源。
-
在这个特定的库中,
name参数仅用于创建带有fopen()的句柄;也许在某个地方,您的AIFF_Ref被另一段代码部分覆盖。 -
@ChristianAichinger 和 Jack:如果您愿意看一看,我已经在这篇文章 (stackoverflow.com/questions/22451558/…) 中发布了我的主要问题的扩展版本。谢谢!