Я пишу программу Objective-C для работы с траекториями биомолекул с XCODE 4.3.1 и ARC. Мне нужно читать файлы PDB, т.е. анализировать большое количество данных в текстовом формате. Я очень разочарован неэффективностью NSString и пытался написать C-эквивалент компонентовSeparatedByString:. Алгоритм отлично работает с 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;
}
malloc. - person Hot Licks   schedule 25.09.2012