请问我的代码为什么会runtime erorr?

「已注销」 2019-01-17 11:51:20

#include<stdio.h>
#include<string.h>
char dna[55][1005];
int acgt[55][1005]={0};
char maxx[1005]={0};
int main ()
{
int T;
scanf("%d",&T);
while(T--)
{
int m,n;
scanf("%d%d",&m,&n);
getchar();

memset(dna,0,sizeof(dna));
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
dna[i][j]=getchar();
getchar();
}

for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
switch(dna[i][j])
{
case'A':acgt[0][j]++;break;
case'C':acgt[1][j]++;break;
case'G':acgt[2][j]++;break;
case'T':acgt[3][j]++;break;
}

}
}

for(int j=0;j<n;j++)
{

int t=0;
for(int i=0,max=acgt[j][0];i<4;i++)
{
if(max<acgt[i][j])
{
max=acgt[i][j];
t=i;
}
}
switch(t)
{
case 0:maxx[j]='A';break;
case 1:maxx[j]='C';break;
case 2:maxx[j]='G';break;
case 3:maxx[j]='T';break;
}

}

int hanming=0;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(dna[i][j]!=maxx[j])
hanming++;
}
}
for(int i=0;i<n;i++)
printf("%c",maxx[i]);
printf("\n%d\n",hanming);

}
return 0;
}
...全文
116 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2019-01-18
  • 打赏
  • 举报
回复
这道题用c++就能过,用对应的c语言版本就euntime erorr,不知道为什么,哎,菜是原罪~
yiyefangzhou24 2019-01-18
  • 打赏
  • 举报
回复
Visual Studio 6 : vc6
Visual Studio 2003 : vc7
Visual Studio 2005 : vc8
Visual Studio 2008 : vc9
Visual Studio 2010 : vc10
Visual Studio 2012 : vc11
Visual Studio 2013 : vc12
Visual Studio 2015 : vc14
yiyefangzhou24 2019-01-18
  • 打赏
  • 举报
回复
没有对应的安装c++运行库?
lin5161678 2019-01-17
  • 打赏
  • 举报
回复
你输入了什么 怎么输入的
自信男孩 2019-01-17
  • 打赏
  • 举报
回复
char dna[55][1005];
int acgt[55][1005]={0};
char maxx[1005]={0};

两个问题:
1.全局变量不需要初始化为0,因为编译器默认会给初始化为0.因为是全局变量。
2. 定义的长度,(55 × 1005 + 55 ×1005) * 4 + 1005 * 4 ==xxxx Bytes
这么多个字节,首先你能用这么多,另外,这么大的空间,系统需要有这么大。这也可能是runtime error的主要原因。
建议使用动态申请空间的形式完成,因为是需要多少申请多少,用完需要手动释放。
  • 打赏
  • 举报
回复
引用 赵4老师 的回复:
C语言教程(附带C语言100例)http://download.csdn.net/detail/zhao4zhong1/8830817

计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……

对学习编程者的忠告:
多用小脑和手,少用大脑、眼睛和嘴,会更快地学会编程!
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步Debug版对应汇编一行!
单步Debug版对应汇编千行不如单步Release版对应汇编一行!
不会单步Release版对应汇编?在你想单步Release版C/C++代码片断的前面临时加一句DebugBreak();重建所有,然后在IDE中运行。(一般人我不告诉他!

VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。

...
老马何以识途 2019-01-17
  • 打赏
  • 举报
回复
内存溢出了?單步調試一下,或者關鍵位置寫一些輸出語句。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧