gpt4 book ai didi

代码给我段错误

转载 作者:行者123 更新时间:2023-11-30 17:39:09 25 4
gpt4 key购买 nike

我不知道为什么我的代码会出现段错误。在它工作正常之前,所以我一定做了一些事情,但我不知道是什么。

此函数从文件中的特定行获取一些 Markdown 元素并返回一个带有元素的动态数组(int * elements)

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;
}

问题出现在下面的函数中。

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];

给我一​​个段错误,我不知道为什么。程序在此行之后停止。

这是主程序

#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.h中提取的

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;

可以吗?告诉我我做错了什么?谢谢!

最佳答案

这里仍然缺少许多代码。

我猜测您的问题可能出在 md->value->string = argv[1]; 中。

(尽管您的问题没有显示您如何使用md->value->string)。

如果您尝试更改md->value->string指向的内存内容,那么您将遇到内存访问冲突,因为该变量指向只读内存段。

如果确实如此,那么您可以通过将 md->value->string = argv[1]; 替换为:

md->value->string = malloc(strlen(argv[1])+1);
strcpy(md->value->string,argv[1]);

关于代码给我段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21936537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com