Jak mogę stworzyć wskaźnik, który będzie wskazywał miejsce w pamięci, które dopiero później zarezerwuję?
char *ptr = NULL;
ptr = (char*)malloc(100);
Nie bardzo to wszystko... Nie możesz sobie wybrac obszaru, który póżniej sobie zarezerwujesz, przynajmniej nie bez głębokiej ingerencji w proces odpowiedzialny za obsługę pamięci. To system zarządza wybieraniem wolnych obszarów, strategią alokacji, a takze to system zwraca wskaznik do przydzielonego obszaru. No chyba, że potrafisz przewidywać przyszłość, albo dogłębnie znasz system.
A jeśli mam taką(element kolejki), to jak utworzyć wsk->następny, aby wskazywał na następny element kolejki?
struct stos *dodajelement(int war, struct stos *pocz)
{
struct stos wsk=(struct stos)malloc(sizeof(struct stos));
wsk->wartosc=war;
wsk->nastepny=pocz;
return wsk;
}
hmm interesuje mnie dlaczego chcesz znać miejsce gdzie przydzielisz pamięć, nigdy się z czymś takim nie spotkałem.
Struktura do tej kolejki wygląda tak:
struct kolejka
{
int wartosc;
struct kolejka *nastepny;
};
Ja chciałem, aby wskaźnik wskazywał na następny element, abym później mógł odtwarzać je po kolei, od pierwszego elementu.
struct kolejka{
struct kolejka *nx; // skroce, zeby sie ladniej pisalo
int val;
};
kolejka* queue=0; // =NULL
void add1(kolejka*& k,int w){ // dodaje na koncu kolejki
if(k){
kolejka* p=k;
while(p->nx)p=p->nx;
p->nx=(kolejka*)malloc(sizeof(kolejka));
p=p->nx;
p->nx=0;
p->val=w;
}else{
k=(kolejka*)malloc(sizeof(kolejka));
k->val=w;
k->nx=0;
}
}
void add2(kolejka** k,int w){ // ten sam efekt, ale inaczej napisane
if(*k){
kolejka* p=*k;
while(p->nx)p=p->nx;
p->nx=(kolejka*)malloc(sizeof(kolejka));
p=p->nx;
p->nx=0;
p->val=w;
}else{
(*k)=(kolejka*)malloc(sizeof(kolejka));
(*k)->val=w;
(*k)->nx=0;
}
}
main(){
add1(queue,1);
add2(&queue,2); // dopisane : zapomnaiłem o &
}
Funkcję, która dodaje na początku sam napisałeś
Wielkie dzięki za pomoc!!!