【问题标题】:segmentation fault calloc in CC中的分段错误calloc
【发布时间】:2016-11-03 00:43:02
【问题描述】:

我正在制作一个 C 程序,该程序需要 calloc、malloc 和 alloca 进程的平均时间。我得到了所有要编译的东西,但是当我运行它时,我遇到了分段错误。它运行的第一件事是 calloc,所以我假设问题从那里开始。

这是我的 calloc 函数,malloc 和 alloca 基本相同,所以我认为还没有理由发布它们。

double calloctest(int objectsize, int numberobjects, int numberoftests)
{
    double average = 0;
    for (int i = 0; i < numberoftests; i++)
    {
            clock_t begin = clock();
            int *objectsize = calloc(numberobjects, sizeof(char) * *objectsize);
            clock_t end = clock();
            double time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
            average = average + time_spent;
            printf("%f", time_spent);
            free(objectsize);
    }
    double totalAverage;
    totalAverage = average / numberoftests;
    return totalAverage;
}

【问题讨论】:

  • 因为你有sizeof(char) * *objectsize
  • A) objectsize 不是指针。 B) sizeof(char) 是 1。你可以有calloc(numberobjects, objectsize)
  • 非常感谢,malloc和alloca做事速度一样吗?我还打印出我的速度,malloc 和 alloca 都得到相同的速度。

标签: c linux segmentation-fault calloc


【解决方案1】:

您有一个局部变量 objectsize,它会隐藏同名的函数参数,并在存储 calloc() 的返回值之前取消引用它:

int *objectsize = calloc(numberobjects, sizeof(char) * *objectsize);

你可能想写:

int *object = calloc(numberobjects, objectsize);
...
free(object);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多