c++ - 尝试读取 AIFF 文件与指针位置等有关的意外错误
问题描述
我一直在尝试将 AIFF 文件读入多个变量,但在尝试读取数据块的数据部分时遇到了问题。我收到错误消息:线程 1:EXC_BAD_ACCESS(代码=2,地址=0x7ffeee1bbce8)。我知道这通常意味着指针有问题,但是我已经检查并运行了很多测试,并且指针没有到达文件末尾,所以不是这样。请有人看看我试图制作一个非常简化的版本来显示我遇到的问题。
int main()
{
FILE * AIFF;
int32_t Datasize = 27539504;
int16_t Data[(Datasize - 8)/2];
AIFF = fopen("/Volumes/Audio CD/Audio Track.aiff", "r");
fread(Data, 2, (Datasize - 8)/2, AIFF);
return 0;
}
错误出现在 fopen 行上。这也是 64 位 Mac 上 Xcode 中的 C++。
谢谢。
解决方案
您的代码似乎没有检查是否fopen()
返回 NULL... 因此,如果fopen()
由于某种原因失败(很可能是因为指定的文件不存在或无法打开以进行读取),那么您的程序将在fread()
尝试时崩溃取消引用 NULL 指针。
旁注:由于 .AIFF 文件是二进制文件,而不是 ASCII,因此您应该将“rb”作为第二个参数传递给fopen()
而不是“r”。
推荐阅读
- ios - 更新信息用户配置文件 Swift 4
- shopify - 如何从 /product_listings API 端点获取 inventory_item_id
- r - 访问 dplyr 中的分组子集
- spring-boot - Spring Cloud Server Config 只刷新 application.yml 而不是其他属性文件
- node.js - 在 Angular 项目中使用猫鼬
- javascript - 如何用图像而不是颜色填充chartjs中折线图的点背景?
- javascript - 在 JavaScript 中粘贴文本事件的情况下,如何阻止输入文本事件处理程序触发?
- c# - SessionID:单元测试中的 NotImplementedException
- javascript - 如何更改类值javascript
- ios - 发布到解析服务器时,是否返回新创建的对象 ID