私は自分で書いたこの本当に単純な C++ 関数を持っています。
文字列から「-」文字を取り除くだけです。
これがコードです
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'
ただし、コードをデバッグして問題がないかどうかを確認すると、フローは正常に動作し、最終的に正しい削除されたシーケンスが返されます。
2 つの変数のメモリを出力しようとしましたが、メモリの読み取り値は次のとおりです。
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;
}
今、私は何が起こっているのか本当にわかりません。