今天寫了一個函數,使用了約2M的空間,下列函數中的靜態常量max_audio_index_file_size=2000000,
void ReadAudioIndexFile()
{std::string fileName = audioFilePath + audioIndexFileName;
FILE* pFile = fopen( fileName.c_str(), "rb" );
if( NULL == pFile )
{
SSError << "Open Audio Index File Failed, FileName:" << fileName << END;
return;
}
char buffer[max_audio_index_file_size];
memset( buffer, 0, max_audio_index_file_size );
UINT32 readNum = fread( buffer, 1, max_audio_index_file_size, pFile );
fclose(pFile);
std::string strcontent = std::string( buffer, readNum );
delete buffer;
KKSG::AudioList alist;
if( alist.ParseFromString(strcontent) )
{
SSError << "Parse Audio Index File Failed, FileSize:" << readNum << END;
return;
}
for( INT32 i=0; i<alist.datalist_size(); i++ )
{
UINT32 time = alist.datalist(i).time();
UINT64 uid = alist.datalist(i).uid();
ReadOneFile( time, uid );
}
}
開始調試,每次斷點走到ReadAudioIndexFile這個函數,進程就crash,報告爲 未處理的異常:0x000000FD, stack overflow
後來發現這個是因爲 char buffer[max_audio_index_file_size] 這個地方,在棧上申請了太多的內存,導致棧溢出,後來把該處
改爲從堆上分配空間,就解決了: char* buffer = new char[max_audio_index_file_size];
重新編譯,調試,斷點走到此處,再也不會crash