以下来自Libaiff 图书馆。我完全随机地收到以下错误(即,有时我的程序可以完美运行,有时它会被此错误卡住,并且它总是在此函数的同一点中断)。(1949,0x7fff7b82d310) malloc: * 对象 0xd00000000b400 的错误:未分配被释放的指针 *在 malloc_error_break 中设置断点进行调试
我的问题是,如果r->buffer2
已经被释放,那么控件是否有可能通过语句if (r->buffer2)
并进入块尝试并执行free(r->buffer2)
?换句话说,如果r->buffer2
已经被释放了,难道不应该if (r->buffer2)
阻止释放尝试再次发生吗?
static void AIFF_ReadClose(AIFF_Ref r)
{
if (r->buffer)
free(r->buffer);
if (r->buffer2)
free(r->buffer2); // THIS IS WHERE THE BREAK OCCURS EVERYTIME
Unprepare(r);
fclose(r->fd);
free(r);
return;
}
编辑:
以下是 的定义AIFF_Ref
:
struct s_AIFF_Ref {
FILE* fd;
int flags;
int stat; /* status */
int segmentSize;
int bitsPerSample;
int nMarkers;
int nChannels;
double samplingRate;
uint64_t nSamples;
int markerPos;
uint64_t len;
uint64_t soundLen;
uint64_t pos;
uint64_t sampleBytes;
uint64_t commonOffSet;
uint64_t soundOffSet;
uint64_t markerOffSet;
IFFType format;
IFFType audioFormat;
void* decoder;
void* pdata;
void* buffer;
size_t buflen;
void* buffer2;
size_t buflen2;
int tics;
};
typedef struct s_AIFF_Ref* AIFF_Ref;
谁能建议为什么会发生这种奇怪的行为以及我如何解决它?谢谢。