это один из моих первых OOP проектов, и я не понимаю, что я делаю не так. Я должен сделать класс для связанного списка с функциями, написанными внутри. Я получаю эту ошибку при самом простом вызове конструктора, и я не знаю, почему: выброшено необработанное исключение: нарушение прав записи. это был nullptr.
#include "stdafx.h"
#include <iostream>
#include <conio.h>
class Nod {
int info;
Nod* next;
public:
Nod() {
info = 0;
next = NULL;
}
Nod(int inf, Nod *p)
{
info = inf;
next = p;
}
~Nod() {
delete[] next;
info = -1;
}
void setInfo(int x) {
info = x;
}
int getInfo() {
return info;
}
void setNext(Nod *p) {
next = p;
}
Nod* getNext(Nod x) {
return x.next;
};
};
class Lista {
Nod* start;
Nod* end;
int unsigned size;
public:
Lista(int x) { //Constructor
size = 1;
start->setInfo(x);
start->setNext(NULL);
end->setNext(NULL);
}
Lista(int x, int y) { //Constructor
start = new Nod;
start->setInfo(y);
Nod* NodCurent;
start->setNext(NodCurent);
NodCurent->setInfo(y);
for (unsigned int i = 2; i <= size; i++)
{
Nod* NodUrmator;
NodUrmator = new Nod;
NodCurent->setNext(NodUrmator);
NodUrmator->setInfo(x);
end->setNext(NodUrmator);
end = NodUrmator;
Nod NodCurent(x, NodUrmator);
}
}
~Lista() { //Destructor
Nod *p = start->getNext(*start);
Nod *aux;
while (p != NULL)
{
aux = p;
p = p->getNext(*p);
delete aux;
}
start = end = NULL;
size = 0;
}
void insert(int x) { //insert x at the end of the list
if (size != 0)
{
Nod* newEnd = new Nod(x, NULL);
//newEnd->setNext(NULL);
//end->setInfo(x);
end->setNext(newEnd);
end = newEnd;
size++;
}
else
{
Nod* aux;
aux->setInfo(x);
size = 1;
start = end = aux;
}
}
void insertAt(int x, int i) { //insert x on position i
if (i >= size)
{
Nod *p = new Nod(x, NULL);
end->setNext(p);
end = p;
size++;
}
else if (i <= 0)
{
Nod* aux = new Nod(x, start);
start = aux;
size++;
}
else
{
Nod* aux = start->getNext(*start);
//aux->setNext(*(start->getNext));
if (i == 1)
{
start->setInfo(x);
start->setNext(aux);
}
else
{
for (int k = 1; k <= i; k++)
{
aux = aux->getNext(*aux);
}
Nod aux1(x,aux);
size++;
}
}
}
int get(int i) //Return element from position i;
{
Nod* aux = start;
for (int k = 1; k < i; k++)
aux = aux->getNext(*aux);
return aux->getInfo();
}
int length() { //Return size of list;
return size;
}
Lista reverse() //Returneaza lista scrisă invers;
{
//IDK;
}
void removeFirst() //deletes first element;
{
if (size == 0)
return;
Nod *p = start->getNext(*start);
delete start;
start->setNext(p->getNext(*p));
size--;
}
void removeLast() //deletes last element;
{
if (size == 0)
return;
if (size == 1)
removeFirst();
Nod *p = start->getNext(*start);
for (int i = 1; i < size; i++)
p = p->getNext(*p);
p->setNext(NULL);
delete end;
end = p;
size--;
}
void remove(int i) //deletes element from position i;
{
if (i <= 0)
removeFirst();
if (i >= size)
removeLast();
Nod *p = start->getNext(*start);
for (int k = 1; k < i; k++)
p = p->getNext(*p);
Nod *aux = p->getNext(*p);
Nod *deSters = aux;
aux = aux->getNext(*aux);
delete deSters;
p->setNext(aux);
size--;
}
bool hasDuplicates() //Checks if list has duplicates;
{
if (size <= 1)
return false;
int v[200];
Nod *p = start->getNext(*start);
for (int i = 1; i <= size && p->getNext(*p) != NULL; i++)
{
v[i] = p->getInfo();
p = p->getNext(*p);
}
for (int i = 1; i <= size - 1; i++)
for (int j = 1; j <= size; j++)
if ((i != j) && (v[i] == v[j]))
return true;
return false;
}
bool has(int x) //Checks if list has element x;
{
if (size == 0)
return false;
Nod *p = start->getNext(*p);
for (int i = 1; i <= size && p->getNext(*p) != NULL; i++)
{
if (p->getInfo() == x)
return true;
p->getNext(*p);
}
return false;
}
bool isEmpty() //Checks if list is empty;
{
if (size == 0)
return true;
return false;
};
};
int main()
{
Lista L(3);
getchar();
return 0;
}