使用C++和通用模板提供分段错误错误的链接列表。
我已经写了一个通用的链表验证码:使用C++和通用模板提供分段错误错误的链接列表。
#include <iostream>
#include <stdio.h>
template <class T>
struct Node{
T data;
Node<T> *next;
};
template <class T>
class LinkedList{
Node<T>* head;
int size;
public:
LinkedList<T>() {
size = 0;
head = NULL;
}
void ll_push(T data){
Node<T>* new_node;
new_node->data = data;
new_node->next = head;
head = new_node;
size ++;
}
int ll_size(){
return size;
}
void ll_print_int(){
Node<T> *start = head;
while (start != NULL){
cout<< start->data;
start = start->next;
cout<< ",";
}
}
};
int main(){
LinkedList<int> ll;
for(int i = 0; i < 10; i++){
ll.ll_push(i);
}
ll.ll_print_int();
return 0;
}
但每当我试图执行ll_print,我得到一个分段错误。我想我可能会在某个时候误用指针,但我不确定。我仍然是C++的新手,所以如果有人能解释我做错了什么,我会非常感激。
但是,每当我尝试执行ll_print,我得到一个分段错误错误。
您在这里使用unintialized指针:
Node<T>* new_node; // unintialized pointer.
new_node->data = data;
最有可能你想:
Node<T>* new_node = new Node<T>;
new_node = ...
感谢您的回复,但这并不能解决问题。 – Robot0110
@ Robot0110是的,它*确实*。你重建你的程序了吗? –
它不能解决问题,因为问题中显示的代码不是真实代码,而是幻想代码,因为它显示错误,所以它无法编译。谁知道原始代码实际读取的内容。它可能有其他类似的错误。 –
谢谢,但这并不能解决问题 – Robot0110
任何自我尊重编译器会由于这种常见的编程错误而发出诊断消息,而且编译器很可能会这样做,但是由于它确实生成了编译的程序,因此您会忽略它。那么,你刚刚学到了一个非常宝贵的教训:即使它成功地编译了一个编译好的程序,也不要忽略来自编译器的警告和其他诊断信息。编译器向你咆哮的原因有很多,这不是因为你的编译器喜欢生成长而混乱的消息。 –
@ Robot0110 *我仍然是C++的新手* - 但是您正在尝试编写一个程序,只有中级到高级程序员才能正确编写**,甚至一位中级程序员可能会错过一些重要细节。 – PaulMcKenzie