我正在运行需要MD轨迹文件中步数的C代码。它首先调用一个获取步数的函数。
函数调用是
int steps=get_steps(argv[2]);
并且函数本身(在单独的头文件中)是
int get_steps(char* f){
printf("file_len function call\n");
char *cmd=malloc(sizeof(char)*120);
printf("%p",cmd);
printf("created command");
sprintf(cmd,"wc -l %s > lines.txt",f);
system(cmd);
printf("called system command");
FILE *f1;
f1=fopen("lines.txt","r");
int steps;
fscanf(f1,"%d",&steps);
fclose(f1);
f1=fopen(f,"r");
int atoms;
fscanf(f1,"%d",&atoms);
fclose(f1);
sprintf(cmd,"rm lines.txt");
system(cmd);
free(cmd);
return (int)steps/(atoms+2);
}
我正在编辑这段代码,以便从argc中获取更少的输入参数,当我编译并测试代码时,由于分段错误,此时崩溃了。
但是,当我用
运行代码时./migration_binding Na200_Mg10 traj.xyz top -b -n 1
它工作正常。关于这里可能出错的任何提示?
答案 0 :(得分:0)
如果您正在访问第二个参数:argv[2]
,则需要使用至少2个参数执行该程序。否则它将尝试读取不属于你的内存,这通常以分段错误结束。
您还可以检查argv
数组的长度 - 这是第一个主函数参数:
int main(int argc, char *argv[])
请注意,第一个参数始终是可执行文件的路径。
答案 1 :(得分:0)
所以一时兴起,我在函数调用后注释掉main()中的行。事实证明我正在使用char * s(输出文件的标签,例如" _junction_location.dat"和" _ion_timeseries.dat"放在argv [1]之后)我没有' t malloc' ed。
然而,我的问题仍然与命令式编程有关。这些错误是代码的原因,该代码在程序崩溃之前执行。为什么程序会在get_steps()函数调用时崩溃,而不是在错误发生的地方崩溃?