我很难弄清楚为什么我的程序是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;
}
答案 0 :(得分:0)
ap
是一个未初始化的指针。声明long int *ap
时,它会在堆栈上分配一个可以保存long int *
地址的内存,但是它不会为该指针指向的变量分配内存。
因此,在使用*
运算符取消引用之前,需要初始化指针值。
更合适的方法是::
long int *ap = &a;
或
long int *ap = malloc(sizeof(long int));
*ap = a;
取消引用非初始化指针是程序段错误的原因!