У меня есть эта действительно простая функция на С ++, которую я написал сам.
Он должен просто удалить символы «-» из моей строки.
Вот код
char* FastaManager::stripAlignment(char *seq, int seqLength){
char newSeq[seqLength];
int j=0;
for (int i=0; i<seqLength; i++) {
if (seq[i] != '-') {
newSeq[j++]=seq[i];
}
}
char *retSeq = (char*)malloc((--j)*sizeof(char));
for (int i=0; i<j; i++) {
retSeq[i]=newSeq[i];
}
retSeq[j+1]='\0'; //WTF it keeps reading from memory without this
return retSeq;
}
Я думаю, этот комментарий говорит сам за себя.
Я не знаю почему, но когда я запускаю программу и распечатываю результат, я получаю что-то вроде
'stripped_sequence''original_sequence'
Однако, если я попытаюсь отладить код, чтобы увидеть, есть ли что-то не так, потоки идут правильно и заканчивают тем, что возвращают правильную очищенную последовательность.
Я попытался распечатать память двух переменных, и вот показания памяти
память для seq: http://i.stack.imgur.com/dHI8k.png
память для * seq: http://i.stack.imgur.com/UqVkX.png
память для retSeq: http://i.stack.imgur.com/o9uvI.png
память для * retSeq: http://i.stack.imgur.com/ioFsu.png
(не удалось включить ссылки / картинки из-за спам-фильтра, извините)
Это код, который я использую для распечатки строк
for (int i=0; i<atoi(argv[2]); i++) {
char *seq;
if (usingStructure) {
seq = fm.generateSequenceWithStructure(structure);
}else{
seq = fm.generateSequenceFromProfile();
}
cout<<">Sequence "<<i+1<<": "<<seq<<endl;
}
Теперь я действительно не знаю, что происходит.