[英]Segmentation Fault while implementing a C program for sorting
我正在開發一個程序來對包含打開字典的 XML 文件進行排序。 我正在嘗試使用 flex 來識別 C 中的單詞、標簽等和鏈表來對它們進行排序。 到目前為止,我有一個鏈表可以按字母順序對每個單詞進行排序,並且我嘗試在每個單詞對應的用法中對這些單詞進行相同的排序。 我遇到了分段問題,可能是因為我認為從InsertUsageWord()
function 中得到的列表是 NULL,我在哪里 Z34D1F91FB2E514B8576FAB1A75A89A6B 錯了? 提前致謝。
C代碼
typedef struct _dicio {
char *usg, *orth, *def; //uso, palavra e definicao
struct _dicio *next;
} dicio;
typedef struct _usage {
char *word;
struct _usage *unext;
} usage;
usage* InsertUsageWord(usage* ulista, char *palavra) {
usage *unode = (usage*)malloc(sizeof(usage));
unode->word = strdup(palavra);
unode->unext = ulista;
return unode;
}
dicio* InsertWord(dicio* lista, char *utilizacao, char *ortografia, char *definicao) {
dicio *node = (dicio*)malloc(sizeof(dicio));
node->usg = strdup(utilizacao);
node->orth = strdup(ortografia);
node->def = strdup(definicao);
node->next = lista;
return node;
}
void ListWord(usage* ulista, dicio* lista) {
if(ulista == NULL) return;
printf("%s", ulista->word);
List(lista, ulista->word);
ListWord(ulista->unext, lista);
}
void List(dicio* lista, char* usg) {
if(lista == NULL) return;
if (strcmp(usg, lista->usg) == 0 ) {printf("%s", lista->usg);}
List(lista->next, usg);
}
彈性代碼
#include "dictp16.c"
char *word;
char *palavra;
char *utilizacao;
char *definicao;
dicio *dicionario = NULL;
usage *use = NULL;
LETRAS [a-zA-ZÁÉÍÓÚÀÌüçÇãáíéóúàâôêõ. -;,()_]+
%x ORT USG DEF
%%
\<orth\> { BEGIN(ORT); }
<ORT>{LETRAS} { palavra = strdup(yytext); }
<ORT>\<\/orth\> { BEGIN(INITIAL); }
\<usg\ type=\"[a-z]+\"\> { BEGIN(USG); }
<USG>{LETRAS} { utilizacao = strdup(yytext); }
<USG>\<\/usg\> { use = InsertUsageWord(use, word);
BEGIN(INITIAL); }
\<def\> { BEGIN(DEF); }
<DEF>{LETRAS} { definicao = strdup(yytext); }
<DEF>\n {;}
<DEF>. {;}
<DEF>\<\/def\> { dicionario = InsertWord(dicionario, utilizacao, palavra, definicao);
BEGIN(INITIAL); }
\n {}
<<EOF>> { ListWord(use, dicionario); return 0; }
. {;}
%%
預期的 output 將是這樣的:
ant:
- Alampi~ao: O mesmo que _lampi~ao_. Cf. B. Pereira, _Pros´odia_, vb. _polymixus_.
- An^espera: O mesmo que _n^espera_. Cf. B. Pereira, _Prosodia_, vb. _pytmena_.
- Arraba¸ca: Planta, o mesmo que _raba¸ca_.
...
Pop.
- Achafundar: Enterrar no logo; meter no fundo da ´agua.
- Acarditar: O mesmo que _acreditar_.
- Alampi~ao: O mesmo que _lampi~ao_. Cf. B. Pereira, _Pros´odia_, vb. _polymixus_.
你在打電話
使用 = InsertUsageWord(使用,單詞);
但你從來沒有將 word 初始化為任何東西
您正在調用InsertUsageWord(use, word);
帶有未初始化的word
。 你想用utilizacao
來調用它嗎? 因為它剛剛通過strdup()
用malloc()
初始化!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.