C++ 这是我的代码,它返回进程返回的255(0xff)代码块

C++ 这是我的代码,它返回进程返回的255(0xff)代码块,c++,C++,我已经编写了一些代码,用于读取包含37000个DNA序列的文本文件,并分析特定模式的序列。但每次我运行代码时,它都会说 codon.exe停止工作,进程返回255(0xff) 代码如下: #include<iostream> #include<vector> #include<cstring> #include<cstdio> #include<fstream> using namespace std; int main() {

我已经编写了一些代码,用于读取包含37000个DNA序列的文本文件,并分析特定模式的序列。但每次我运行代码时,它都会说

codon.exe停止工作,进程返回255(0xff)

代码如下:

#include<iostream>
#include<vector>
#include<cstring>
#include<cstdio>
#include<fstream>

using namespace std;

int main()
{

 ifstream dnafile;
dnafile.open("code.txt");            /// code.txt is notepad file name
if(!dnafile.is_open())
{
    cout<<"file not opened";
}

int c=0;
vector <int> a;
vector <char> codon;

int l=0; /// lTH  TERM OF DNA SEQUENCE
char x;
while((x = dnafile.get()) != EOF)   /// READING CHARACTER BY CHARACER FROM FILE
{
   if(x=='>')
   {
       l=0;
       codon.push_back('#');
       continue;
   }
       l++;
       codon.push_back(x);
}
for(int l=0;l<codon.size();l++)
{
    if(codon.at(l)=='#')
        c++;
}
int c1[c+1];
float b[c+1],d[c+1];

for(int j=0;j<(c+1);j++)
{
    for(int i=1;i<a.size();i++)
    {
        if (a[i]==0&&c1[j]!=0)
        {
            d[j]=(b[j]+a[i-c1[j]])/c1[j];
            i++;
            break;
        }
        else if(c1[j]==0)
            d[j]=0;
        else
        {
            b[j]=b[j]+(a[i]-a[i-1]);
        }
    }
    continue;

}
for(int j=0,i=0;j<a.size(),i<(c+1);j=j+c1[i],i++)
{
    cout<<"("<<d[i]<<","<<c1[i]<<","<<a[j]<<")"<<", ";
}

return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
ifstream-dnafile;
dnafile.open(“code.txt”);///code.txt是记事本文件名
如果(!dnafile.is_open())
{
cout

我在这里发现了两个错误,这是可变长度数组,你会得到一个错误

int c1[c+1];
float b[c+1],d[c+1];
将其更新为如下所示的动态数组,因为c是一个变量,并且在运行时被赋值。
它只适用于C是const。对于变量,你会得到C++禁止可变长度数组< /p> 最后别忘了释放内存

delete [] c1;
delete [] b;
delete [] d;
或者您可以使用STL库作为解决方法。
vector
vector
也可以工作,因为它们可以在您将元素推入时更新其大小

也就是检查文件存在的位置

if(!dnafile.is_open())
{
    cout<<"file not opened";
}

开始使用调试器,找到它崩溃的地方。<代码> int c1[c+1];< /Cord>这行和线看起来是无效的C++。为什么不使用<代码>向量< /代码>?你在其他地方使用它,为什么不在这里?<代码> STD::向量C1(C+1)
即使我将它们声明为向量,也不会影响数组中的向量,初始化它们很容易values@AyushKumar-如果您更改为
std::vector
,则有一个很大的优势,即您将有机会比使用dumb(可变长度)更容易地找出错误原因是
std::vector
有一个
at()
函数,用于测试索引是否在范围内。使用数组时,不会得到这样的测试。很有可能发生错误,因为您使用的数组索引超出范围,而使用普通数组不会告诉您是否这样做。@AyushKumar and。我改为
std::vector
,并且在最后一行中使用了
at()
a
向量/数组为空,您正试图访问
a[0]
,它不存在。我应用了您的建议,即使在出现运行时错误之后,调试在这一行显示断点:else{b[j]=b[j]+(a[I]-a[I-1]);}并且它显示仍然无法正常工作错误。GCCTATCTCTCTCTCATCAGGCCGCAAGAGGTGCCGGCTTGGACACCCTGGGGTCGGGTCACCATGAGATAAACCTCTTCTTCTCTCTCTGGACATGTCCAGAGAGTGGCTTGCGCTACAAGGTCACCCTGGCTCTGCAGAGGTGAAAAAGAGAGAAGTCTCTCTCAGACCATCCAGGCAGAGAGAGAGG阿加塔加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加加GAAACAATATAGAAACATTTTTTAAGTA@V.404如果OP改为
std::vector
,并使用
at()
而不是
[],则会有更好的帮助
访问向量。请看我在主要部分中的注释——这样做至少会检测到一个错误。您在上一个cout循环中遇到分段错误。在本例中,这意味着您正在访问某个不存在的数组索引,这是由“,”i<(c+1)”引起的。这种情况很容易处理at()正如@PaulMcKenzie所说,这与@PaulMcKenzie使用try-throw-catch的实现版本相同。
if(!dnafile.is_open())
{
    cout<<"file not opened";
}
else {
    int c=0;
    // all the code
    delete [] c1;
    delete [] b;
    delete [] d;
}
return 0;