【发布时间】:2019-03-31 02:35:51
【问题描述】:
将存储在指针中的值分配给函数中的局部变量时,我遇到了分段错误。我有一种预感,我处理指针很差,但我似乎无法弄清楚问题是什么。有任何想法吗?谢谢!
我尝试添加断点,并确定实际的段错误发生在“int i = *AlignCounter;”
这是发生段错误的函数:
void align_S_T(int *StringCounterS, int
*StringCounterT, int *AlignCounter, char *StringS, char
*StringT, char *AlignmentS, char *AlignmentT)
{
//Local Variables
int i = *AlignCounter; //<--Seg Fault Line
int s = *StringCounterS;
int t = *StringCounterT;
//Set Strings
AlignmentS[i] = StringS[s];
AlignmentT[i] = StringT[t];
//Increment Counters
*AlignCounter++;
*StringCounterS++;
*StringCounterT++;
}
以下是在 main 中创建和分配指针的方式:
int* StringCounterT; //T String Counter
int* AlignCounter; //Align Counter
StringCounterS=0;
StringCounterT=0;
AlignCounter=0;
【问题讨论】:
-
使用align_S_T函数时,给参数AlignCounter的值是多少?
-
你认为你被允许访问
0x0的内存位置吗(在系统保留内存范围的最底部)?你认为那里存储了什么?int i = *AlignCounter; //<--Seg Fault Line很好地表明了第一个问题的答案。换句话说,AlignCounter=0;将 地址0存储为AlignCounter的值,当您尝试访问您无权访问的内存位置时,BAM SegFault。 -
在使用
align_S_T函数之前,您是否为AlignCounter分配了动态内存? -
@Miguel,不,我刚刚声明了指针。
-
当您尝试取消引用指向无处的指针时,您认为会发生什么?