我有一个案例,我使用两组不同的变量调用函数两次。第一个调用导致分段错误,第二个调用成功返回。
参数相同,缺少变量名称。这种行为可能是什么原因?
#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
语句进行调试。我已经评论了代码执行失败的地方。
答案 0 :(得分:1)
程序具有未定义的行为,因为指针rlength
未初始化且具有不确定的值。
int *rlength;
另一方面,在您尝试使用此指针写入未分配内存的函数中。
*res_length = nlength;