我试图尝试使用方法中的字符串输入并将其设置为结构的变量,然后将其放在链接列表中。我没有包含所有代码,但我发布了构造函数和所有好东西。现在代码突破
node->title = newTitle;
node->isbn = newISBN;
因此newTitle是我尝试设置为变量节点的Book结构的title变量的方法的字符串输入。现在,我假设这与指针问题和尝试设置数据有关,但我无法找到修复/替代方案。 另外,我尝试使用
strcpy(node->title, newTitle)
但是将字符串转换为字符列表存在问题,因为strcpy只使用字符列表。还尝试了其他一些事情,但似乎没有任何事情可以解决,对解释的帮助将不胜感激。
struct Book
{
string title;
string isbn;
struct Book * next;
};
//class LinkedList will contains a linked list of books
class LinkedList
{
private:
Book * head;
public:
LinkedList();
~LinkedList();
bool addElement(string title, string isbn);
bool removeElement(string isbn);
void printList();
};
//Constructor
//It sets head to be NULL to create an empty linked list
LinkedList::LinkedList()
{
head = NULL;
}
//Description: Adds an element to the link in alphabetical order, unless book with
same title then discards
// Returns true if added, false otherwise
bool LinkedList::addElement(string newTitle, string newISBN)
{
struct Book *temp;
struct Book *lastEntry = NULL;
temp = head;
if (temp==NULL) //If the list is empty, sets data to first entry
{
struct Book *node;
node = (Book*) malloc(sizeof(Book));
node->title = newTitle;
node->isbn = newISBN;
head = node;
}
while (temp!=NULL)
{
... //Rest of Code
答案 0 :(得分:0)
请注意,Book结构已经是一个链表实现,所以你根本不需要LinkedList类,或者你不需要结构的'next'元素。
但是,您粘贴的最后一个(长)代码段没有理由在您指定的行中出现错误。 node-> title = newTitle应该将newTitle中的字符串复制到struct的title字段中。字符串对象是固定大小的,因此无法覆盖任何缓冲区并导致seg错误。
但是,可能会因代码中的某些内容而导致内存损坏,直到稍后才会导致错误。要寻找的是任何数组,包括char [],你可能会过度填充。另一个想法是你提到保存方法参数。如果你复制,没关系,但如果你做了类似
的事情char* f() {
char str[20];
strcpy(str, "hello");
return str;
}
...那你就有问题了。 (因为str在堆栈上分配,并且只返回指向函数返回后无效的位置的指针。)方法参数是局部变量。
答案 1 :(得分:0)
您可以找到所寻求的答案here。
简而言之:内存malloc
返回不包含正确构造的对象,因此您无法使用它。请尝试使用new
/ delete
代替。