首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用atoi()分割故障

使用atoi()分割故障
EN

Stack Overflow用户
提问于 2022-10-03 20:56:17
回答 1查看 79关注 0票数 0

当我试图运行我的程序时,我得到了一个分段错误(内核转储)错误。我把它传递到命令行。/stats1250100 argv3是样本数,而argv4、argv5是样本的下界和上界。我正在慢慢地看我从哪里得到错误,我想当我试图把这些分配给int变量时,我会出错。

代码语言:javascript
复制
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()的调用,但仍然得到了错误。

EN

回答 1

Stack Overflow用户

发布于 2022-10-03 21:01:24

当您运行./stats 1 2 50 100时,argv将是[0: "./stats", 1: "1", 2: "2", 3: "50", 4: "100"]。所以没有argv[5],它在大多数操作系统上都是空的。解决办法是:

代码语言:javascript
复制
int size = atoi(argv[2]);
int lower = atoi(argv[3]);
int upper = atoi(argv[4]);

此外,您应该检查argc,以防用户没有提供足够的参数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73940745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档