XCODE4.3.1とARCを使用して生体分子の軌道を処理するObjective-Cプログラムを作成しています。PDBファイルを読み取る必要があります。つまり、大量のテキスト形式のデータを解析する必要があります。私はNSStringの非効率性に非常に失望しており、componentsSeparatedByString:と同等のCを書き込もうとしていました。アルゴリズムはNSStringとNSMutableArraysで問題なく動作しますが、char*とchar**を使用するのに苦労しています。
残念ながら、EXC_BAD_ACCESSエラーが発生します。奇妙なことに、i=68103とj=68049のエラーが発生します(これらの番号はベルを鳴らしますか?)。これは、クラッシュする前にしばらくの間機能したことを意味します。エラーは「静的」です(常に同じ(i、j)番号でブロックします)。配列は正常に機能しているようです(クラッシュする前の値のNSLog)。
どうやら、私はCコードとポインターの背後にある微妙な点についてはあまり経験がありませんが、それを機能させるための提案を聞いて間違いなく嬉しいです!ありがとう !
ここにコードがあります:
+(char**) componentsSeparedByNewLineCEQUIV:(const char*)aChar:(int*)numWord
{ // char* aChar : my file, is typically 3 millions characters
int j=-1; //Last non space character
int i; //Scanned character
int len=strlen(aChar);
char** stringArray=malloc((*numWord)*sizeof(char*));
for (i=0;i<len; i++)
{ if (aChar[i]==10)
{
if ( j!=-1)
{
char* buffer2=malloc(i-j+1);
strcpy(buffer2, strndup(aChar+j, i-j));
stringArray[i]=malloc(sizeof(char)*strlen(buffer2)+1); //EXC_BAD_ACCESS HERE
strcpy(stringArray[i], buffer2);
}
j=-1;
}
else if (j==-1)
{j=i;}
}
if (j!=-1)
{ char* buffer2=malloc(i-j+1);
strcpy(buffer2, strndup(aChar+j, i-j));
stringArray[i]=malloc(strlen(buffer2)+1);
strcpy(stringArray[i], buffer2);
}
return stringArray;
}