将指针中存储的值分配给函数中的局部变量时出现分段错误。我有一种直觉,就是我对指针的处理不佳,但是我似乎无法弄清楚问题是什么。有任何想法吗?谢谢!
我尝试添加断点,并且确定实际的段错误发生在“ 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;
答案 0 :(得分:1)
您要指示AlignCounter指向地址0(AlignCounter = 0;),然后在align_S_T()内尝试使用“ *”运算符获取存储在该地址内的值(int i = * AlignCounter;)。您不能执行此操作,因为它不是有效地址(在调用align_S_T()之前尝试将AlignCounter指向已声明的整数,segFault转到下一行,rss,相同)。
void align_S_T(int *StringCounterS, int
*StringCounterT, int *AlignCounter, char *StringS, char
*StringT, char *AlignmentS, char *AlignmentT)
{
//Local Variables
int i = *AlignCounter;
int s = *StringCounterS; //<--Seg Fault Line!!
int t = *StringCounterT;
//Set Strings
AlignmentS[i] = StringS[s];
AlignmentT[i] = StringT[t];
//Increment Counters
*AlignCounter++;
*StringCounterS++;
*StringCounterT++;
}
int main(int argc, char *argv[]){
int* StringCounterT; //T String Counter
int* StringCounterS; //T String Counter
int* AlignCounter; //Align Counter
char *a, *b, *c, *d;
int x;
a = b = c = d = "";
x = 10;
StringCounterS=0;
StringCounterT=0;
AlignCounter=&x;
align_S_T(StringCounterS, StringCounterT, AlignCounter, a, b, c, d);
return(0);
}
答案 1 :(得分:0)
我已经解决了您的问题,如下面的代码所示,在调用函数AlignCounter
之前,您需要为align_S_T
变量分配动态内存或静态变量。
#include <stdio.h>
#include <stdlib.h>
void align_S_T(int *AlignCounter)
{
int i = *AlignCounter;
*AlignCounter++;
}
int main()
{
// Dynamic memory
int *AlignCounter=NULL;
AlignCounter = (int*) malloc(10 * sizeof(int));
*AlignCounter=0;
// static memory
// int AlignCounter[buffer_needed];
// AlignCounter[0]=0;
function(AlignCounter);
free(AlignCounter);
return 0;
}
希望对您有帮助。
答案 2 :(得分:0)
好吧,int * AlignCounter创建一个指针,但是不分配任何指向它的指针。然后AlignCounter = 0;使它为NULL。如果然后将其发送到align_S_T,则仅引用NULL指针。景气。
您可能要声明int AlignCounter = 0,然后将&AlignCounter发送到您的函数。