技術的なお話。OpenALの利用で注意点。
久々の更新で、
たまには技術っぽいメモ風。
OpenALを利用する場合に、サンプルあたりから
コード引っ張ってきたりしてたんだけど、
Analysかけると引っかかる部分がある。
return data;
のとこが、
Undefined or garbage value returned to caller
となる。
これは、
GetOpenALAudioData
の一連の中で、
if (err) {
goto Exit;
}
というようにエラーでExitに
飛ぶ箇所が何度もあるんだけど、
dataが定義されてないまま
Exitの以下の
return data;
が呼ばれてますということ。
つまり、
具体的には、
void* GetOpenALAudioData(
CFURLRef fileURL, ALsizei* dataSize, ALenum* dataFormat, ALsizei *sampleRate, bool *loaded)
{
OSStatus err;
UInt32 size;
......
を、
void* GetOpenALAudioData(
CFURLRef fileURL, ALsizei* dataSize, ALenum* dataFormat, ALsizei *sampleRate, bool *loaded)
{
void* data = nil;
OSStatus err;
UInt32 size;
......
に変える。
つまり、
下の方にあった void* data;
をExitがif文で呼ばれる以前に定義して、
さらにnilを初期値で入れて上げるのだ。
(元々下にあった void* data;を上にカット&ペーストする感じ)
以上!
たまには技術っぽいメモ風。
OpenALを利用する場合に、サンプルあたりから
コード引っ張ってきたりしてたんだけど、
Analysかけると引っかかる部分がある。
return data;
のとこが、
Undefined or garbage value returned to caller
となる。
これは、
GetOpenALAudioData
の一連の中で、
if (err) {
goto Exit;
}
というようにエラーでExitに
飛ぶ箇所が何度もあるんだけど、
dataが定義されてないまま
Exitの以下の
return data;
が呼ばれてますということ。
つまり、
具体的には、
void* GetOpenALAudioData(
CFURLRef fileURL, ALsizei* dataSize, ALenum* dataFormat, ALsizei *sampleRate, bool *loaded)
{
OSStatus err;
UInt32 size;
......
を、
void* GetOpenALAudioData(
CFURLRef fileURL, ALsizei* dataSize, ALenum* dataFormat, ALsizei *sampleRate, bool *loaded)
{
void* data = nil;
OSStatus err;
UInt32 size;
......
に変える。
つまり、
下の方にあった void* data;
をExitがif文で呼ばれる以前に定義して、
さらにnilを初期値で入れて上げるのだ。
(元々下にあった void* data;を上にカット&ペーストする感じ)
以上!
