相同代码的分段错误

时间:2015-11-25 23:59:48

标签: c pointers segmentation-fault

我有一个案例,我使用两组不同的变量调用函数两次。第一个调用导致分段错误,第二个调用成功返回。

参数相同,缺少变量名称。这种行为可能是什么原因?

#include <stdio.h>
#include <stdlib.h>
#include "euler-v2.h"

#define POWER 1000

int main(void)
{
    int i;

    int base[] = { 2 };
    int *r;
    int *rlength;

    // The below line causes a segmentation fault
    r = power_arr(base, sizeof(base) / sizeof(int), 2, rlength);

    int n[] = { 2 };
    int *pow;
    int *length;

    pow = power_arr(n, sizeof(n) / sizeof(int), 2, length);


    exit(0); 
}

单独的头文件中的函数原型:

int *power_arr(int *n, int nlength, int exp, int *res_length);

我无法辨别第一次拨打power_arr和第二次通话之间的区别。对这里究竟发生了什么的任何见解?

编辑:

功能power_arr的来源:

int *power_arr(int *n, int nlength, int exp, int *res_length)
{
    int i, j, tmp_length;
    int *res, *tmp;

    res = n;

    printf("Step 1\n"); // Last printed line
    *res_length = nlength;
    printf("Step 2\n"); // Never reaches here

    while (--exp > 0)
    {
        tmp_length = *res_length;
        tmp = malloc(sizeof(int) * tmp_length);

        if (!tmp)
        {
            return NULL;
        }

        copy(tmp, res, *res_length);

        for (i = *n - 1; i > 0; i--)
        {
            res = sum(res, *res_length, tmp, tmp_length, res_length);
        }

        if (!res)
        {
            return NULL;
        }

            free(tmp);
    }
        return res;
}

注意,我已经放置printf语句进行调试。我已经评论了代码执行失败的地方。

1 个答案:

答案 0 :(得分:1)

程序具有未定义的行为,因为指针rlength未初始化且具有不确定的值。

int *rlength;

另一方面,在您尝试使用此指针写入未分配内存的函数中。

*res_length = nlength;