当我试图运行我的程序时,我得到了一个分段错误(内核转储)错误。我把它传递到命令行。/stats1250100 argv3是样本数,而argv4、argv5是样本的下界和上界。我正在慢慢地看我从哪里得到错误,我想当我试图把这些分配给int变量时,我会出错。
int main(int argc, char *argv[])
{
for (int i = 1; i < argc; i ++)
{
if (is_valid_int(argv[i]) == 1)
{
continue;
}
else
{
printf("%s is not a valid integer\n", argv[i]);
exit(0);
}
}
int size = atoi(argv[3]);
int lower = atoi(argv[4]);
int upper = atoi(argv[5]);
printf("%d%d%d", size, lower, upper);
generate_population(size, lower, upper);
return 0;
}
int *generate_population(int size, int lower, int upper)
{
int *my_array=(int*)malloc(size * sizeof(int));
for (int i = 0; i < size; i++)
{
my_array[i] = (rand() % (upper - lower + 1)) + lower;
}
for (int j = 0; j < size; j++)
{
printf("%d", my_array[0]);
}
return 0;
}它不会在我赋值后打印这些值。我试着注释掉了generate_population()的调用,但仍然得到了错误。
发布于 2022-10-03 21:01:24
当您运行./stats 1 2 50 100时,argv将是[0: "./stats", 1: "1", 2: "2", 3: "50", 4: "100"]。所以没有argv[5],它在大多数操作系统上都是空的。解决办法是:
int size = atoi(argv[2]);
int lower = atoi(argv[3]);
int upper = atoi(argv[4]);此外,您应该检查argc,以防用户没有提供足够的参数。
https://stackoverflow.com/questions/73940745
复制相似问题