为什么我的程序是segfaulting?

时间:2016-04-01 19:26:20

标签: c segmentation-fault

我很难弄清楚为什么我的程序是segfaulting。有帮助吗? 某些上下文:这是一个编码分配,我通过一个程序运行此方法,该程序使用各种输入执行并确定函数是否正确。此赋值的目的是读取汇编并基于给定的汇编构造函数。

我不认为它是comp4方法,因为我已经将它与给定的程序集进行了比较,并且它是相同的,这表明它在问题4中方法,但我不知道问题4中甚至可能导致seg错误的是什么。有人可以提供任何帮助吗?

long int comp4(long int * a, long int b) {
  long int output = *a;
  long int newa = output + b;
  *a = newa;
  return output;
}

long int problem4(long int a, long int b){
int i;
long int* ap;
*ap = a;
long int sum;
long int holder;
for (i=0;i<b;i++){
  sum = sum + i*8;
  holder = comp4(ap,2);
  sum = sum + holder;
}
return sum;
}

1 个答案:

答案 0 :(得分:0)

ap是一个未初始化的指针。声明long int *ap时,它会在堆栈上分配一个可以保存long int *地址的内存,但是它不会为该指针指向的变量分配内存。

因此,在使用*运算符取消引用之前,需要初始化指针值。

更合适的方法是::

long int *ap = &a;

long int *ap = malloc(sizeof(long int));
*ap = a;

取消引用非初始化指针是程序段错误的原因!