【发布时间】:2011-06-24 08:33:31
【问题描述】:
我正在尝试实现实现 wav 播放的类,如 this example 中所述。相关代码部分在这里:
/* Setup for conversion */
wav_cvt.buf = malloc(wav_len * wav_cvt.len_mult);
wav_cvt.len = wav_len;
memcpy(wav_cvt.buf, wav_buf, wav_len);
/* We can delete to original WAV data now */
SDL_FreeWAV(wav_buf);
/* And now we're ready to convert */
SDL_ConvertAudio(&wav_cvt);
当一个 wav 文件播放完毕(我不会再播放它了),我是否需要释放上面 malloc()-ed 的内存缓冲区?还是在某处自动完成?
【问题讨论】:
-
无论你使用什么malloc,你都必须释放。我不确定这个具体情况,但总的来说这是语义。
-
这必须在
SDL_FreeWAV()的文档中指定,但是令人惊讶的是SDL要求您手动分配但自己负责删除(它怎么能知道你是如何分配内存的吗?) -
@ereOn wav 内存在
SDL_LoadWAV中分配,并用SDL_FreeWAV释放,但这不是我要问的。一切都告诉你(和@Armen)是对的。 -
如果您使用的是 classes 那么为什么这个问题被标记为 C
-
@Tim 因为对 C 也做了同样的事情。这个 malloc()-ed 内存应该是 free()-ed 吗?