さて、ここでも、今度はコンパイラがメモリ エラー (リーク) を示しています。
otest(18015,0xacae32c0) malloc: * オブジェクト 0x194e734 のエラー: 解放されたオブジェクトのチェックサムが正しくありません - オブジェクトは解放後に変更された可能性があります。* malloc_error_break にブレークポイントを設定してデバッグする
私は ARC を有効にして STL で clang を使用しています。これは C++ ファイル (.cpp) です。
私が見つけたもの:「削除」行にコメントすると、問題なく実行されます。割り当てられたメモリ (cStr) を誰が解放しているのか疑問に思います。
ところで。このコードは、クエリ文字列 (arg=abc&arg2=asdb) を受け取り、それらの値を含むマップを返します。
static map<string, string> getDecodedQueryString( string qs ) {
map<string, string> r;
qs = qs+"&";
char key[100], value[100], * cStr, *ptr;
cStr = new char[ qs.length() ];
memcpy( cStr, qs.c_str(), url.length()-1);
cStr[qs.length()]=0;
ptr = strtok(cStr, "&");
while ( ptr != NULL && sscanf( ptr, "%[^=]=%[^&]", &key, &value ) == 2) {
r[key]=value;
ptr = strtok(NULL, "&");
}
delete [] cStr; //leaking?
return r;
}
ありがとう