gpt4 book ai didi

char* 内存分配错误,除非使用 'top -b -n 1'

转载 作者:太空宇宙 更新时间:2023-11-03 23:59:54 25 4
gpt4 key购买 nike

我正在运行需要 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

它工作正常。关于这里可能出了什么问题的任何提示?

最佳答案

如果您正在访问第二个参数:argv[2],您需要至少使用 2 个参数来执行该程序。否则它会尝试读取不属于您的内存,这通常会以段错误结束。

您还可以检查 argv 数组的长度 - 这是第一个主函数参数:

int main(int argc, char *argv[])

请注意,第一个参数始终是可执行文件的路径。

关于char* 内存分配错误,除非使用 'top -b -n 1',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49214683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com