以下に、指定された文字列 (str) の置換文字列を構築するメソッドを示します。理由はよくわかりませんが、デバッグ中に次の例外が発生することがあります。
Unhandled exception at 0x01282665 in test.exe: 0xC0000005: Access violation
writing location 0x00000000.
ret_str (ret_str[l]=elem[0]) のインデックス 0 に ('u') を代入しようとしたとき
unsigned char* getPermStr(long length,unsigned char* strt,unsigned char* elem){
unsigned char* ret_str;
long l = 0;
ret_str = (unsigned char*) calloc(length,sizeof(unsigned char));
while(l < length){
if(elem < (strt+length-1)){
ret_str[l]=elem[0]; // ACCESS VIOLATION HERE
elem+=1;
}else{
ret_str[l]=elem[0];
elem = strt;
}
l+=1;
}
return ret_str;
}
アクセス違反が発生する理由がわかりません... ret_str の範囲内にいるのに、何が問題なのですか? ところで: 文字列 ret_str は、関数呼び出しの後に解放されます。
更新: elem に問題はありませんでした。その理由は、動的割り当て用のヒープにメモリが残っていないときにメモリを割り当てたため (大量のメモリ リークのため)、calloc が NULL ポインターを返したためです。そのため、エラーが発生しました。