Witam. Jestem na etapie pisania funkcji, która zwróci dwie funkcje będące podziałem pierwszej (procedura "dziel" w merge sort). Mam problem z przepisywaniem pamięci. Jako parametr przekazujemy listę główną, i dwie puste, do których będziemy przepisywać pamięć. Od pierwszego wskaźnika pojawia się problem z przepisaniem pamięci do wskaźników - są po prostu puste, kompilator informuje, że niemożliwy jest odczyt pamięci. Kod jeszcze nie jest dokończony, ale na tym etapie, wydaje mi się, powinno wszystko działać. Prosiłbym o pomoc.
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <time.h>
#include <cmath>
using namespace std;
struct mode
{
int vol;
mode *next;
};
void push(mode *&head, int x)
{
mode *pon = new mode;
pon->vol = x;
pon->next = head;
head = pon;
}
void show(mode *head)
{
cout << "head-> ";
mode *p = head;
while (p != NULL)
{
cout << p->vol << " -> ";
p = p->next;
}
cout << "NULL" << endl;
}
void split_list(mode*& p, mode*& p2, mode*& p3)
{
int srodek, licznik = 0;
mode* p_head = p;
while (p->next)
{
licznik = licznik + 1;
p = p->next;
}
licznik = licznik + 1;
srodek = licznik / 2;
licznik = 0;
p = p_head;
p3 = p;
while (licznik != srodek)
{
p3 = p3->next;
licznik = licznik + 1;
}
p2 = p_head;
while (p2 != p3->next)
{
p2 = p->next;
}
p2->next = NULL;
p2 = p;
while (p2) // funkcja tymczasowa, do sprawdzenia, czy lista dochodzi do połowy.
{
cout << p2->vol << "->";
p2 = p->next;
}
}
int main()
{
mode* head = NULL;
mode* head2 = NULL;
mode* head3 = NULL;
push(head, 5);
push(head, 103);
push(head, 100);
push(head, 12);
push(head, 1052);
push(head, 10);
show(head);
split_list(head, head2, head3);
show(head);
system("pause");
}