我有我自己编写的这个非常简单的 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'
但是,如果我尝试调试代码以查看是否有任何问题,则流程会正常运行,并最终返回正确的剥离序列。
我试图打印出两个变量的内存,这里是内存读数
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;
}
现在,我真的不知道发生了什么。