【发布时间】:2012-02-05 18:22:27
【问题描述】:
所以,我是 C 的新手,我一直在尝试编写这个工具来从命令行编辑音乐文件上的 id3 标签。我一直收到这个错误:
* glibc 检测到 双重释放或损坏(顶部):0x0000000000502010 **
根据我的阅读,我知道这与释放内存有关。不过,我只是不确定从这里去哪里。无论如何,我的逻辑是,如果存在标签,我会读入该标签,然后从命令行中指定的字段中进行任何需要进行的更改。这是给我带来麻烦的障碍。感谢您提前提供任何见解!
fopen(argv[1], "rb");
fseek(in_file, -128, SEEK_END);
fread(&tagTest, sizeof(struct iD3Tag), 1, in_file);
fclose(in_file);
for (x = 2; x < argc-1; x++)
{
if (strcmp(argv[x], "-title"))
strncpy(tagTest.title, argv[x+1], 30);
if (strcmp(argv[x], "-artist"))
strncpy(tagTest.artist, argv[x+1], 30);
if (strcmp(argv[x], "-album"))
strncpy(tagTest.album, argv[x+1], 30);
if (strcmp(argv[x], "-year"))
strncpy(tagTest.year, argv[x+1], 4);
if (strcmp(argv[x], "-comment"))
strncpy(tagTest.comment, argv[x+1], 28);
if (strcmp(argv[x], "-track"))
tagTest.track = atoi(argv[x+1]);
}
tagTest.seperator = 0;
fopen(argv[1], "r+b");
fseek(in_file, -128, SEEK_END);
fwrite(&tagTest, sizeof(struct iD3Tag), 1, in_file);
fclose(in_file);
【问题讨论】:
-
fread(&tagTest, sizeof(struct iD3Tag), 1, in_file);是不行的。由于内存对齐约束,结构在结构成员之间具有内部填充,因此您的标签信息基本上会被破坏...... -
struct iD3Tag的定义是什么?