gpt4 book ai didi

将字符串复制到链接列表不起作用

转载 作者:行者123 更新时间:2023-11-30 18:27:23 24 4
gpt4 key购买 nike

我有一个任务将一些输入复制到链接列表,但是当我尝试使用 strncpy 复制它时,它不起作用,并且出现错误

Exception thrown at 0x0F4C0E15 (ucrtbased.dll) in 
ProjectA.exe: 0xC0000005: Access violation writing location 0xCDCDCDCD.

代码:

typedef struct Frame
{
char* name;
unsigned int duration;
char* path;
} Frame;

typedef struct FrameNode
{
Frame* frame;
struct FrameNode* next;
} FrameNode;

FrameNode* createframe(char name[], char path[], int duration)
{
Frame* list = (Frame*)malloc(sizeof(Frame));
strncpy((list->name), name, STR_LEN);
list->duration = duration;
strncpy(list->path, path, STR_LEN);
FrameNode* frame = list;
frame->next = NULL;
return list;
}

最佳答案

在将字符串复制到目标位置之前,您需要使用malloc 分配空间。第一个 malloc 仅为 Frame 分配空间,而不为其内部 char * 分配空间。

createframe中的代码应该是:

    Frame* list = malloc(sizeof(Frame));
list->name = malloc(STR_LEN);
strncpy((list->name), name, STR_LEN);
list->duration = duration;
list->path= malloc(STR_LEN);
strncpy(list->path, path, STR_LEN);
//FrameNode* frame = list; // <- nope. FrameNode* should point to a FrameNode not a Frame
FrameNode* frame = malloc(sizeof(FrameNode));
frame->frame = list;
frame->next = NULL;
return frame;

在使用动态分配变量之前最好检查一下 malloc 是否已成功,如下所示:

 Frame *list = malloc(sizeof(Frame));
if(list==NULL){
perror("problem allocating frame");
return NULL;
}
list->name = malloc(STR_LEN);
if(list->name==NULL){
free(list);//free the already allocated memory
perror("error message");
return NULL;
}
strncpy((list->name), name, STR_LEN);
...
return frame;
}

createframe返回时,您应该检查它是否返回NULL,如果返回NULL,则处理错误,通常通过释放分配的内存并终止程序。

<小时/>

You should not cast the result of malloc

关于将字符串复制到链接列表不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56618916/

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