gpt4 book ai didi

字符指针段错误

转载 作者:太空宇宙 更新时间:2023-11-04 04:02:29 25 4
gpt4 key购买 nike

好的,下面是正在发生的事情的要点:

我将一个字符数组 (char[x]) 传递给一个函数,该函数的参数定义为字符指针 (char *)。进入函数后,我分配了另一个字符指针(这是我拥有的结构的一部分)。将传入参数分配给结构的字符指针后,我立即遇到段错误;因此。

temp->name = (char*)malloc(sizeof(char));
temp->name = name;

这就是我之前使用该功能的方式:

char *name = "HEY";
Function(name);

以下是我在错误情况下使用它的方式:

char name[3] = "HEY";
Function(name);

与上面相同的语句,它工作正常。我通过将名称更改为常量“HEY”并使用相同的输入来确保它不是其他任何东西,并且一切顺利。

如果有人能想出一个不经意的原因,我将不胜感激。谢谢你!

完整的函数如下:

  • openList 是指向结构链表开头的指针
  • tempOpen 是一个临时指针,我们可以利用它来搜索列表,而不改变 openList 的位置
  • findOpenSetSID/findItem -> 通过SID/key在链表中寻找结构
  • answerOpen/answerItem -> 1 == 第一个节点,2 == 任何其他节点,0 = 未找到

这里是所涉及结构的简要总结。开放结构是指向另一个结构(称为集合结构)的指针的链表集合结构是名称、sid 和项目结构的链接列表项结构是数据和键的链表

Error_t WRITE(Sid_t sid, char *key, char *data){

Open_p_t tempOpen = openList; //setting a pointer to a struct
int answerOpen = findOpenSetSID(sid, &tempOpen);
if(answerOpen > 0){
Set_p_t targetNode;
if(answerOpen == 1){
targetNode = tempOpen->file;
}
else{
targetNode= tempOpen->next->file;
}
Item_p_t tempItem = targetNode->items;
int answerItem = findItem(key, &tempItem);
Item_p_t targetItem;
targetItem = (Item_p_t)malloc(sizeof(Item_t));
if(answerItem > 0){
if(answerItem == 1){
targetItem = targetNode->items;
}
else{
targetItem = targetNode->items->next;
}
targetItem->data = data;
}
else{
**targetItem->data = data;** <<<The problem line.
basically I am just adding
items to my sets. But this line
freaks out when the input changes
from char* to char[]
targetItem->key = key;

targetItem->next = targetNode->items;
targetNode->items = targetItem;
}
return 0;
}
return 1;
}

这是输入段:

字符键[32],数据[64];//使用 fscanf(fd, "%s %s", key data) 读入数据
然后调用 WRITE(setId, key, data);

最佳答案

首先,这两行:

temp->name = (char*)malloc(sizeof(char));
temp->name = name;

顶行没有用,会造成内存泄漏。

其次,这两行:

char *name = "HEY";
char name[3] = "HEY";

接近但不完全相同。第一个导致 name 指向一个 4 字节的数据 block ,其中包含字符串 "HEY" 和一个空终止符(值 0'\0') 最后。第二个导致 name 指向一个 3 字节的内存块,字节为 "HEY" 并且没有空终止符。

如果您的函数假设它正在获取一个以 null 结尾的字符串(很有可能),那么第二个变体可能会导致段错误。

关于字符指针段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10185705/

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