问题描述
这是给我造成皮肤衰老的功能
exporter.c
static void ExportExterns(char *name){
boolean makeExtern = false;
externalAdressesPointer *pointer;
pointer = getExternalAdressesHead();
FILE *file;
char *fullName = malloc(sizeof(char)*(strlen(name)+5));
strcpy(fullName,name);
fullName = strcat(fullName,".ext");
if (pointer =! NULL){
file = fopen(fullName,"ab+");
fprintf(file,"%s %07d\n",pointer->symbol,pointer->adress); /**<<HERE IS THE SEGMENTATION FAULT*/
while (pointer->nextAdress != NULL){
pointer = pointer->nextAdress;
fprintf(file,pointer->adress);
}
fprintf(stdout,"Externs file %s exported\n",fullName);
}
细分错误来自我评论的行(fprintf(file,pointer->adress);
external.h
typedef struct externalAdresses
{
char *symbol;
int adress;
struct externalAdresses *nextAdress;
}externalAdressesPointer;
externalAdressesPointer *getExternalAdressesHead();
void storeAdressWithExternalSymbol(char *,int);
这是我创建链接列表的地方:
external.c ,这是整个文件
#include "general.h"
#include "external.h"
#include "parameters.h"
externalAdressesPointer *AdressesWithExternalSymbolsHead = NULL;
/**gets a symbol and dress of a word that is containing the symbol stores them in the AdressesWithExternalSymbols list */
void storeAdressWithExternalSymbol(char *_symbol,int _adress){
char *Symbolcopy = malloc(MAX_LINE_LENGTH+2);
externalAdressesPointer *ListPointer = NULL;
strcpy(Symbolcopy,_symbol);
if (AdressesWithExternalSymbolsHead == NULL){ /**create the head of the list if it doesn't exist*/
AdressesWithExternalSymbolsHead = (externalAdressesPointer *)malloc(sizeof(externalAdressesPointer));
ListPointer = AdressesWithExternalSymbolsHead;
}
else{/**if a list exist (head exists)*/
ListPointer = AdressesWithExternalSymbolsHead;
while (ListPointer->nextAdress != NULL){/**gets the last link of the list*/
ListPointer = ListPointer->nextAdress;
}
ListPointer->nextAdress = (externalAdressesPointer *)malloc(sizeof(externalAdressesPointer));/**add a new adress to the list*/
ListPointer = ListPointer->nextAdress;
}
ListPointer->symbol = Symbolcopy;
ListPointer->adress = _adress;
ListPointer->nextAdress = NULL;
}
/**returns a pointer to the head of the external adresses list*/
externalAdressesPointer *getExternalAdressesHead(){
return AdressesWithExternalSymbolsHead;
}
我还有2个链表,但它们并没有发生,我无法弄清这里有什么区别,而导致fprintf出现此分段错误的我的错误是什么
解决方法
您在函数pointer =! NULL
的{{1}}语句中做了if
。
这是ExportExterns
至! NULL
的分配。
pointer
被评估为! NULL
,因为1
被认为是错误的,而NULL
是逻辑而非运算符。
这将使指针变量!
的指针无效,而对其取消引用将导致分段错误。
您应该使用pointer
作为条件。
另外,在使用pointer != NULL
之前,还应检查file
是否不是NULL
(如果fopen()
成功)。