왜 내 코드가 세그먼트 오류를 발생시키는 지 알 수 없습니다. 잘 작동하기 전에 무엇인가 했어야했는데 무엇을해야할지 모르겠다.코드가 세분화 오류를 발생시킵니다.
이 함수는 파일 의 특정 라인으로부터 어떤 마크 다운 요소를 얻고,이 문제는 아래 함수 발생 요소
int * parser_getElements(char * string)
{
int * elements;
char * token, * temptoken;
int charcount = 0, elemcount = 1, i = 0;
assert(string != NULL);
elements = malloc(sizeof(int));
*elements = 0;
token = strtok(string," ");
while(token != NULL)
{
temptoken = token;
while (*temptoken)
{
charcount++;
++temptoken;
}
if(token[0] == '*' && token[charcount - 1] == '*')
{
if(token[1] == '*' && token[charcount - 2] == '*')
{
elements[elemcount-1] = EMPH;
}
else
{
if(token[1] != '*' && token[charcount - 2] != '*')
{
elements[elemcount-1] = ITAL;
}
}
elemcount++;
elements = realloc(elements,sizeof(int) * elemcount);
}
else if(token[0] == '_' && token[charcount - 1] == '_')
{
if(token[1] == '_' && token[charcount - 2] == '_')
{
elements[elemcount-1] = EMPH;
}
else
{
if(token[1] != '_' && token[charcount - 2] != '_')
{
elements[elemcount-1] = ITAL;
}
}
elemcount++;
elements = realloc(elements,sizeof(int) * elemcount);
}
else
{
elements[elemcount-1] = TEXT;
elemcount++;
elements = realloc(elements,sizeof(int) * elemcount);
}
token = strtok(NULL, " ");
charcount = 0;
}
return elements;
}
와 동적 배열 (INT * 요소)를 반환한다.
void parser_printMDElements(List markdown, FILE * out)
{
MD_Element element;
int count = 0, no_text = 0;
if(markdown != NULL)
{
element = markdown->value->elements[0];
while(element <= EMPH)
{
if(element > TEXT)
{
no_text = 1;
}
count++;
element = markdown->value->elements[count];
}
count = 0;
element = markdown->value->elements[0];
while(element <= EMPH)
{
if(no_text)
{
printf("%s\n",MD_Element_Descr[element]);
}
count++;
element = markdown->value->elements[count];
}
parser_printMDElements(markdown->next,out);
}
}
이 선 (초연)
element = markdown->value->elements[0];
나에게 세그먼트 오류를 제공하고 그 이유를 모른다. 이 줄 뒤에 프로그램이 중지됩니다.
이이 코드는
enum MD_Element
{
DOCUMENT,
LINE,
SECTION,
LISTELEMENT,
H1,
H2,
H3,
H4,
H5,
H6,
TEXT,
IMG,
LINK,
QUOTE,
CODE,
ITAL,
EMPH
};
typedef enum MD_Element MD_Element;
typedef struct NodeValue * NodeValue;
struct NodeValue
{
char * string;
int * elements;
};
typedef struct Node * Node;
struct Node
{
MD_Element type;
NodeValue value;
Node next;
};
typedef Node List;
는 SB 수 parser.h에서 추출 된 주요 프로그램
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include "errors.h"
#include "parser.h"
int main(int argc, char * argv[])
{
Errorcode error = ERR_NULL;
char * gap;
int gapcount = 1;
List md = parser_newList();
/** Save name of document in firstnode */
md->value = malloc(sizeof(struct NodeValue));
md->value->string = argv[1];
md->type = DOCUMENT;
md->next = malloc(sizeof(struct Node));
error = parser_parseFile(argv[1],&(md->next));
if(error == ERR_NULL)
{
gap = malloc(sizeof(char));
*gap = '\0';
parser_printMDElements(md, gap, gapcount, stdout);
printf("\n");
}
return 0;
}
입니다. 내가 뭘 잘못했는지 말해 줄래? 감사합니다.
음, 어디 parser_printMDElements''에 대한 호출은 다음과 같습니다 즉 실제로 경우라면
, 당신은 함께
md->value->string = argv[1];
를 대체하여 그것을 해결할 수 있습니까? 'List'의 타입 정의는 어디에 있습니까? 'markdown'의 초기화는 어디에 있습니까? –나는 내 게시물을 적절히 편집했습니다. – user3337413