Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
white_butterfly Forumaš(ica)

Pridružen/a: 14. 10. 2011. (17:44:57) Postovi: (40)16
Spol: 
|
Postano: 22:40 pon, 27. 1. 2014 Naslov: nejasnoća u zadatku |
|
|
Pozdrav!
Moj zadatak kaže da trebam kao provjeru ispisati znakove čvorova uređenog stabla u postorder redoslijedu, međutim na kraju teksta kao izlazni podatak moram ispisati oznake čvorova u preorder redoslijedu. Kao primjer piše da moj program mora ispisati ovo: JFBAGZHEDQPCA (to je postorder zadanog stabla).
Dakle, meni nije jasno da li moj program mora ispisati postorder ili preorder oznake čvorova, i zašto je u danom primjeru dva puta ispisan A? A je korijen stabla u primjeru, ali zar ne bi bio postorder ovakav: JFBGZHEDQPCA, tj. bez ovog prvog A??
Pozdrav!
Moj zadatak kaže da trebam kao provjeru ispisati znakove čvorova uređenog stabla u postorder redoslijedu, međutim na kraju teksta kao izlazni podatak moram ispisati oznake čvorova u preorder redoslijedu. Kao primjer piše da moj program mora ispisati ovo: JFBAGZHEDQPCA (to je postorder zadanog stabla).
Dakle, meni nije jasno da li moj program mora ispisati postorder ili preorder oznake čvorova, i zašto je u danom primjeru dva puta ispisan A? A je korijen stabla u primjeru, ali zar ne bi bio postorder ovakav: JFBGZHEDQPCA, tj. bez ovog prvog A??
|
|
[Vrh] |
|
frutabella Forumaš(ica)

Pridružen/a: 09. 10. 2010. (16:35:36) Postovi: (24E)16
|
|
[Vrh] |
|
beuler Forumaš(ica)


Pridružen/a: 02. 11. 2012. (14:08:41) Postovi: (16)16
|
|
[Vrh] |
|
frutabella Forumaš(ica)

Pridružen/a: 09. 10. 2010. (16:35:36) Postovi: (24E)16
|
Postano: 20:23 uto, 28. 1. 2014 Naslov: |
|
|
:oops: mislim da imam problema s prog2, nesto ovako se meni cini ok, ali ne radi, ne znam u cemu je problem.
Lista sadrzi elemente tipa char. Prepostavka je da ima najvise 10 lisi, a svaka ima najvise 20 elemenata.
[code:1]
#include <stdio.h>
#include<stdlib.h>
#include<ctype.h>
typedef struct celltag{
char c;
struct celltag *next;
}celltype;
typedef celltype *List;
typedef celltype *position;
position LiMakeNull(List *Lp){
*Lp=(celltype*)malloc(sizeof(celltype));
(*Lp)->next=NULL;
return (*Lp);
}
void LiInsert (char x, position p, List *Lp)
{
position temp;
temp=p->next;
p->next=(celltype*)malloc(sizeof(celltype));
p->next=x;
p->next->next=temp;
}
position LiNext(position p, List Lp)
{
if (p->next == NULL)
{
printf("NEXT: Kriva pozicija.");
exit(1);
}
return p->next;
}
int main (void){
int m, i, j;
char c;
List L[10];
position p[10];
printf("Koliko listi zelimo sazeti?\n");
scanf("%d", m);
for(i=1; i<=m; ++i)
p[i]=LiMakeNull(&L[i]);
for(i=1; i<=m; ++i)
{
printf("U listu %d ubaci sljedece charove:\n", i);
for(j=0; j<20; ++j)
{
scanf("%c", c);
if (isalpha('c')==0)
{ i++;
break;
}
else
LiInsert(c, p[i], &L[i]);
p[i]=LiNext(p[i], L[i]);
}
}
return 0;
}
[/code:1]
Ovdje kao zelim stvoriti liste L[1], L[2], ... , L[m], a svaka od njih ima svoje pozicije p[1], ... p[m].
I for petljom popunjavam. :oops:
Ali nesto ne stima...
mislim da imam problema s prog2, nesto ovako se meni cini ok, ali ne radi, ne znam u cemu je problem.
Lista sadrzi elemente tipa char. Prepostavka je da ima najvise 10 lisi, a svaka ima najvise 20 elemenata.
Kod: |
#include <stdio.h>
#include<stdlib.h>
#include<ctype.h>
typedef struct celltag{
char c;
struct celltag *next;
}celltype;
typedef celltype *List;
typedef celltype *position;
position LiMakeNull(List *Lp){
*Lp=(celltype*)malloc(sizeof(celltype));
(*Lp)->next=NULL;
return (*Lp);
}
void LiInsert (char x, position p, List *Lp)
{
position temp;
temp=p->next;
p->next=(celltype*)malloc(sizeof(celltype));
p->next=x;
p->next->next=temp;
}
position LiNext(position p, List Lp)
{
if (p->next == NULL)
{
printf("NEXT: Kriva pozicija.");
exit(1);
}
return p->next;
}
int main (void){
int m, i, j;
char c;
List L[10];
position p[10];
printf("Koliko listi zelimo sazeti?\n");
scanf("%d", m);
for(i=1; i<=m; ++i)
p[i]=LiMakeNull(&L[i]);
for(i=1; i<=m; ++i)
{
printf("U listu %d ubaci sljedece charove:\n", i);
for(j=0; j<20; ++j)
{
scanf("%c", c);
if (isalpha('c')==0)
{ i++;
break;
}
else
LiInsert(c, p[i], &L[i]);
p[i]=LiNext(p[i], L[i]);
}
}
return 0;
}
|
Ovdje kao zelim stvoriti liste L[1], L[2], ... , L[m], a svaka od njih ima svoje pozicije p[1], ... p[m].
I for petljom popunjavam.
Ali nesto ne stima...
|
|
[Vrh] |
|
beuler Forumaš(ica)


Pridružen/a: 02. 11. 2012. (14:08:41) Postovi: (16)16
|
Postano: 5:40 čet, 30. 1. 2014 Naslov: |
|
|
[quote="frutabella"]:oops: mislim da imam problema s prog2, nesto ovako se meni cini ok, ali ne radi, ne znam u cemu je problem.
Lista sadrzi elemente tipa char. Prepostavka je da ima najvise 10 lisi, a svaka ima najvise 20 elemenata.
Ovdje kao zelim stvoriti liste L[1], L[2], ... , L[m], a svaka od njih ima svoje pozicije p[1], ... p[m].
I for petljom popunjavam. :oops:
Ali nesto ne stima...[/quote]
i ja sam se pomucio :D ali ovo radi
http://pastebin.com/VWmB2MdR
frutabella (napisa): | mislim da imam problema s prog2, nesto ovako se meni cini ok, ali ne radi, ne znam u cemu je problem.
Lista sadrzi elemente tipa char. Prepostavka je da ima najvise 10 lisi, a svaka ima najvise 20 elemenata.
Ovdje kao zelim stvoriti liste L[1], L[2], ... , L[m], a svaka od njih ima svoje pozicije p[1], ... p[m].
I for petljom popunjavam.
Ali nesto ne stima... |
i ja sam se pomucio ali ovo radi
http://pastebin.com/VWmB2MdR
_________________ Sumnjam, dakle možda jesam.
|
|
[Vrh] |
|
Countess Forumaš(ica)


Pridružen/a: 22. 07. 2013. (13:34:10) Postovi: (13)16
Spol: 
|
|
[Vrh] |
|
frutabella Forumaš(ica)

Pridružen/a: 09. 10. 2010. (16:35:36) Postovi: (24E)16
|
|
[Vrh] |
|
gljividus Forumaš(ica)

Pridružen/a: 10. 11. 2012. (22:18:49) Postovi: (D)16
|
Postano: 22:41 uto, 27. 1. 2015 Naslov: |
|
|
molila bih nekoga za pomoć...imam dictionary pomoću BST, gdje je binarno stablo prikazano pomoću pointera..kao implementaciju koristila sam funkcije iz udžbenika: delete, delete-min,insert, member, makenull. program se sruši kad pozovem neke od tih glavnih funkcija.. zna li netko mora li se još neka implementacija ubaciti u program? tipa za binarno stablo pomoću pointera? stvarno sam više izgubljena :(
molila bih nekoga za pomoć...imam dictionary pomoću BST, gdje je binarno stablo prikazano pomoću pointera..kao implementaciju koristila sam funkcije iz udžbenika: delete, delete-min,insert, member, makenull. program se sruši kad pozovem neke od tih glavnih funkcija.. zna li netko mora li se još neka implementacija ubaciti u program? tipa za binarno stablo pomoću pointera? stvarno sam više izgubljena
|
|
[Vrh] |
|
01 Forumaš(ica)

Pridružen/a: 01. 02. 2015. (13:36:05) Postovi: (1)16
|
Postano: 13:48 ned, 1. 2. 2015 Naslov: |
|
|
Program se rusi pa ako netko vidi zasto bila bih zahvalna na pomoci :) .
Osmislite algoritam i napišite odgovarajući program za sortiranje m vektora oblika:X(r)=(x1(r),...,xn(r)), r=1,..,m. Kažemo da je vektor X(j) < X(k) ako postoji i, 1 ≤ i ≤n takav da vrijedi: xr(j) = xr(k) za sve 1 ≤ r < i i xi(j) <xi(k)(to jest, sortira se leksikografski). Nemojte uvoditi ograničenja na veličinu brojeva m i n.
#include <stdio.h>
#include <malloc.h>
struct cv
{
int *vektor;
struct cv *lijevi;
struct cv *desni;
};
int m, n;
int *noviVektor;
struct cv *korijen;
int usporedi(int *prvi, int *drugi, int index)
{
if (index == n)
return -1;
if (prvi[index] < drugi[index])
return -1;
if (prvi[index] > drugi[index])
return 1;
index++;
return usporedi(prvi, drugi, index);
}
void dodaj(struct cv *cvor, int *element)
{
int i;
if (cvor == NULL)
{
cvor = (struct cv *)malloc(sizeof(struct cv));
cvor->vektor = (int *)malloc(n);
for (i = 0; i < n; i++)
(cvor->vektor)[i] = element[i];
cvor->lijevi = NULL;
cvor->desni = NULL;
}
else if (usporedi(element, cvor->vektor, 0) == -1)
dodaj(cvor->lijevi, element);
else
dodaj(cvor->desni, element);
}
void ispisi(struct cv *cvor)
{
int i;
if (cvor->lijevi != NULL)
{
ispisi(cvor->lijevi);
free(cvor->lijevi);
}
for (i = 0; i < n; i++)
{
printf("%d", (cvor->vektor)[i]);
if (i != (n - 1))
printf(" ");
}
printf("\n");
free(cvor->vektor);
if (cvor->desni != NULL)
{
ispisi(cvor->desni);
free(cvor->desni);
}
}
int main(void)
{
int i, j;
korijen = NULL;
scanf("%d", &m);
scanf("%d", &n);
for (i = 0; i < m; i++)
{
noviVektor = (int *)malloc(n);
for (j = 0; j < n; j++)
scanf("%d", &noviVektor[j]);
dodaj(korijen, noviVektor);
free(noviVektor);
}
ispisi(korijen);
return 0;
}
Program se rusi pa ako netko vidi zasto bila bih zahvalna na pomoci .
Osmislite algoritam i napišite odgovarajući program za sortiranje m vektora oblika:X(r)=(x1(r),...,xn(r)), r=1,..,m. Kažemo da je vektor X(j) < X(k) ako postoji i, 1 ≤ i ≤n takav da vrijedi: xr(j) = xr(k) za sve 1 ≤ r < i i xi(j) <xi(k)(to jest, sortira se leksikografski). Nemojte uvoditi ograničenja na veličinu brojeva m i n.
#include <stdio.h>
#include <malloc.h>
struct cv
{
int *vektor;
struct cv *lijevi;
struct cv *desni;
};
int m, n;
int *noviVektor;
struct cv *korijen;
int usporedi(int *prvi, int *drugi, int index)
{
if (index == n)
return -1;
if (prvi[index] < drugi[index])
return -1;
if (prvi[index] > drugi[index])
return 1;
index++;
return usporedi(prvi, drugi, index);
}
void dodaj(struct cv *cvor, int *element)
{
int i;
if (cvor == NULL)
{
cvor = (struct cv *)malloc(sizeof(struct cv));
cvor→vektor = (int *)malloc(n);
for (i = 0; i < n; i++)
(cvor→vektor)[i] = element[i];
cvor→lijevi = NULL;
cvor→desni = NULL;
}
else if (usporedi(element, cvor→vektor, 0) == -1)
dodaj(cvor→lijevi, element);
else
dodaj(cvor→desni, element);
}
void ispisi(struct cv *cvor)
{
int i;
if (cvor→lijevi != NULL)
{
ispisi(cvor→lijevi);
free(cvor→lijevi);
}
for (i = 0; i < n; i++)
{
printf("%d", (cvor→vektor)[i]);
if (i != (n - 1))
printf(" ");
}
printf("\n");
free(cvor→vektor);
if (cvor→desni != NULL)
{
ispisi(cvor→desni);
free(cvor→desni);
}
}
int main(void)
{
int i, j;
korijen = NULL;
scanf("%d", &m);
scanf("%d", &n);
for (i = 0; i < m; i++)
{
noviVektor = (int *)malloc(n);
for (j = 0; j < n; j++)
scanf("%d", &noviVektor[j]);
dodaj(korijen, noviVektor);
free(noviVektor);
}
ispisi(korijen);
return 0;
}
|
|
[Vrh] |
|
beeing Forumaš(ica)

Pridružen/a: 18. 09. 2014. (20:22:02) Postovi: (E)16
|
Postano: 21:12 pet, 29. 1. 2016 Naslov: |
|
|
Pozdrav. Imam problem u vezi zadaće. Zadatak glasi ovako:
Detaljno razradite implementaciju binarne relacije pomocu multiliste (vidi pododjeljak 4.4.5 u knjizi). Dakle napisite u C-u sve potrebne denicije tipova i sve potrebne funkcije. Napisite program koji koristi vasu implementaciju za evidentiranje veze izmedu studenata i izbornih kolegija. Program treba omoguciti:
unosenje ili izbacivanje studenata ili kolegija
biljezenje cinjenice da je zadani student upisao zadani kolegij ili ponistio takav upis.
Takoder, program treba davati odgovore na sljedeca pitanja:
Koje sve kolegije je upisao zadani student?
Koji sve studenti su upisali zadani kolegij?
Dvije domene su mi pokazivaci na char.
Funkcija main izgleda ovako (barem do dijela gdje mi program pada):
[code:1]
int main () {
int br, len;
char p[100];
Relation R;
ReMakeNull (&R);
domain1 student;
domain2 kolegij;
printf("Za unos studenta birajte 1. \n");
// ovdje idu ostali printfovi za ostale unose
while (1) {
printf ("Unesite broj: ");
scanf ("%d", &br);
switch (br) {
case 1: {
printf("Ime studenta: \n");
alociraj1 (&student);
unesi_studenta (student, &R);
break;
}
/* (...) */
[/code:1]
Funkcije koje se pozivaju u case 1 su definirane ovako:
[code:1]
void alociraj1 (domain1 *student) {
char str[100];
scanf(" %[^\n]", str);
(*student) = (domain1)malloc((strlen(str)+1)*sizeof(char));
strcpy(*student, str);
}
void unesi_studenta (domain1 student, Relation *Rp) {
domain2 kolegij;
int flag=1; // pretpostavljamo da ako se unosi student da je on upisao barem jedan kolegij
while (flag) {
printf ("Unesi kolegij koji je %s upisao/la: \n", student);
alociraj2 (&kolegij);
ReRelate ( Rp, student, kolegij);
printf ("Ima li jos kolegija koje je upisao/la? (1/0)");
scanf ("%d", &flag);
}
}
void alociraj2 (domain2 *kolegij) {
char str[100];
scanf(" %[^\n]", str);
(*kolegij) = (domain2)malloc((strlen(str)+1)*sizeof(char));
strcpy(*kolegij, str);
}
void ReRelate (Relation *R, domain1 d1, domain2 d2) {
rcelltype *poc1, *poc2, *p, *t;
int ima1 = MaCompute1(R->M1, d1, &poc1);
int ima2 = MaCompute2(R->M2, d2, &poc2);
if (ima1)
for (p = poc1; p; p = p->next1)
if ( !strcmp (p->d1, d1) && !strcmp(p->d2, d2))
return;
t = (rcelltype*)malloc(sizeof(rcelltype));
strcpy (t->d1, d1);
strcpy (t->d2, d2);
t->next1 = ima1 ? poc1 : NULL;
t->next2 = ima2 ? poc2 : NULL;
printf("rerelate\n");
MaAssign1(&R->M1, d1, t);
MaAssign2(&R->M2, d2, t);
}
void MaAssign1 (Mapping1 *Mp, domain1 d, range r) {
if ((*Mp) == NULL) {
printf("maassign1\n");
(*Mp) = (mcelltype1*)malloc(sizeof(mcelltype1)); // <- tu prestaje raditi
printf("maassign1\n");
strncpy ((*Mp)->d, d, strlen(d));
(*Mp)->r = r;
(*Mp)->left = (*Mp)->right = NULL;
return;
}
// itd.
}
[/code:1]
Program prestaje raditi kod alokacije memorije za *Mp u funkciji MaAssign1. Pojavi se onaj pravokutnik sa "Program (...).exe prestao je raditi; Windows traži rješenje problema na internetu...". Vidi li netko odmah u čemu je stvar? Stavit ću čitav kod u attachment ako netko ne vidi odmah, a voljan je podrobnije pogledati o čemu je riječ. :)
Pozdrav. Imam problem u vezi zadaće. Zadatak glasi ovako:
Detaljno razradite implementaciju binarne relacije pomocu multiliste (vidi pododjeljak 4.4.5 u knjizi). Dakle napisite u C-u sve potrebne denicije tipova i sve potrebne funkcije. Napisite program koji koristi vasu implementaciju za evidentiranje veze izmedu studenata i izbornih kolegija. Program treba omoguciti:
unosenje ili izbacivanje studenata ili kolegija
biljezenje cinjenice da je zadani student upisao zadani kolegij ili ponistio takav upis.
Takoder, program treba davati odgovore na sljedeca pitanja:
Koje sve kolegije je upisao zadani student?
Koji sve studenti su upisali zadani kolegij?
Dvije domene su mi pokazivaci na char.
Funkcija main izgleda ovako (barem do dijela gdje mi program pada):
Kod: |
int main () {
int br, len;
char p[100];
Relation R;
ReMakeNull (&R);
domain1 student;
domain2 kolegij;
printf("Za unos studenta birajte 1. \n");
// ovdje idu ostali printfovi za ostale unose
while (1) {
printf ("Unesite broj: ");
scanf ("%d", &br);
switch (br) {
case 1: {
printf("Ime studenta: \n");
alociraj1 (&student);
unesi_studenta (student, &R);
break;
}
/* (...) */
|
Funkcije koje se pozivaju u case 1 su definirane ovako:
Kod: |
void alociraj1 (domain1 *student) {
char str[100];
scanf(" %[^\n]", str);
(*student) = (domain1)malloc((strlen(str)+1)*sizeof(char));
strcpy(*student, str);
}
void unesi_studenta (domain1 student, Relation *Rp) {
domain2 kolegij;
int flag=1; // pretpostavljamo da ako se unosi student da je on upisao barem jedan kolegij
while (flag) {
printf ("Unesi kolegij koji je %s upisao/la: \n", student);
alociraj2 (&kolegij);
ReRelate ( Rp, student, kolegij);
printf ("Ima li jos kolegija koje je upisao/la? (1/0)");
scanf ("%d", &flag);
}
}
void alociraj2 (domain2 *kolegij) {
char str[100];
scanf(" %[^\n]", str);
(*kolegij) = (domain2)malloc((strlen(str)+1)*sizeof(char));
strcpy(*kolegij, str);
}
void ReRelate (Relation *R, domain1 d1, domain2 d2) {
rcelltype *poc1, *poc2, *p, *t;
int ima1 = MaCompute1(R->M1, d1, &poc1);
int ima2 = MaCompute2(R->M2, d2, &poc2);
if (ima1)
for (p = poc1; p; p = p->next1)
if ( !strcmp (p->d1, d1) && !strcmp(p->d2, d2))
return;
t = (rcelltype*)malloc(sizeof(rcelltype));
strcpy (t->d1, d1);
strcpy (t->d2, d2);
t->next1 = ima1 ? poc1 : NULL;
t->next2 = ima2 ? poc2 : NULL;
printf("rerelate\n");
MaAssign1(&R->M1, d1, t);
MaAssign2(&R->M2, d2, t);
}
void MaAssign1 (Mapping1 *Mp, domain1 d, range r) {
if ((*Mp) == NULL) {
printf("maassign1\n");
(*Mp) = (mcelltype1*)malloc(sizeof(mcelltype1)); // <- tu prestaje raditi
printf("maassign1\n");
strncpy ((*Mp)->d, d, strlen(d));
(*Mp)->r = r;
(*Mp)->left = (*Mp)->right = NULL;
return;
}
// itd.
}
|
Program prestaje raditi kod alokacije memorije za *Mp u funkciji MaAssign1. Pojavi se onaj pravokutnik sa "Program (...).exe prestao je raditi; Windows traži rješenje problema na internetu...". Vidi li netko odmah u čemu je stvar? Stavit ću čitav kod u attachment ako netko ne vidi odmah, a voljan je podrobnije pogledati o čemu je riječ.
Description: |
|
 Download |
Filename: |
Zadaća - string.c |
Filesize: |
23.68 KB |
Downloaded: |
161 Time(s) |
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol: 
Lokacija: /sbin/init
|
Postano: 3:06 sub, 30. 1. 2016 Naslov: |
|
|
Ovdje je problem:
[code:1] t = (rcelltype*)malloc(sizeof(rcelltype));
strcpy (t->d1, d1);
strcpy (t->d2, d2);[/code:1]
Varijable [tt]d1[/tt] i [tt]d2[/tt] su nealocirani pointeri koje [tt]strcpy[/tt] treba dereferencirati i nesto zapisati tamo gdje oni pokazuju (sto je, ovisno o OSu, ili [tt]NULL[/tt] ili neka bezvezna lokacija koja ne postoji ili barem ne pripada programu).
Ovdje je problem:
Kod: | t = (rcelltype*)malloc(sizeof(rcelltype));
strcpy (t->d1, d1);
strcpy (t->d2, d2); |
Varijable d1 i d2 su nealocirani pointeri koje strcpy treba dereferencirati i nesto zapisati tamo gdje oni pokazuju (sto je, ovisno o OSu, ili NULL ili neka bezvezna lokacija koja ne postoji ili barem ne pripada programu).
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju. 
|
|
[Vrh] |
|
beeing Forumaš(ica)

Pridružen/a: 18. 09. 2014. (20:22:02) Postovi: (E)16
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol: 
Lokacija: /sbin/init
|
Postano: 12:34 sub, 30. 1. 2016 Naslov: |
|
|
Da, mislio sam na [tt]t->d1[/tt] i [tt]t->d2[/tt]. Kad dodam alokaciju:
[code:1] t->d1 = (domain1)malloc(strlen(d1)+1);
t->d2 = (domain1)malloc(strlen(d2)+1);[/code:1]
ovaj dio programa prodje kako treba i ispise mi:
[code:1]rerelate
maassign1
maassign1[/code:1]
prije nego padne. To se desi ovdje:
[code:1] (*Mp) = (mcelltype1*)malloc(sizeof(mcelltype1));
printf("maassign1\n");
strncpy ((*Mp)->d, d, strlen(d));[/code:1]
Ocito, problem je isti: [tt](*Mp)->d[/tt] je nealocirani pointer kojeg [tt]strncpy[/tt] mora dereferencirati da pi pisao tamo gdje taj pointer pokazuje (sto je, kao i prije, ili [tt]NULL[/tt] ili nesto besmisleno).
Da, mislio sam na t→d1 i t→d2. Kad dodam alokaciju:
Kod: | t->d1 = (domain1)malloc(strlen(d1)+1);
t->d2 = (domain1)malloc(strlen(d2)+1); |
ovaj dio programa prodje kako treba i ispise mi:
Kod: | rerelate
maassign1
maassign1 |
prije nego padne. To se desi ovdje:
Kod: | (*Mp) = (mcelltype1*)malloc(sizeof(mcelltype1));
printf("maassign1\n");
strncpy ((*Mp)->d, d, strlen(d)); |
Ocito, problem je isti: (*Mp)→d je nealocirani pointer kojeg strncpy mora dereferencirati da pi pisao tamo gdje taj pointer pokazuje (sto je, kao i prije, ili NULL ili nesto besmisleno).
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju. 
|
|
[Vrh] |
|
beeing Forumaš(ica)

Pridružen/a: 18. 09. 2014. (20:22:02) Postovi: (E)16
|
Postano: 16:55 sub, 30. 1. 2016 Naslov: |
|
|
Ups, hvala. :) Nastavila bih gnjaviti ako smijem. U jednom trenutku program mi ulazi u
[code:1]void ReCompute2 (Relation R, domain1 d1, Set2 *S2p) {
SeMakeNull2(S2p);
rcelltype *p;
if (R.M1) //R.M1 je pokazivac na strukturu
printf("R.M1 nije null\n");
int ima = MaCompute1(R.M1, d1, &p);
if(!ima)
return;
(...)
}
[/code:1]
a MaCompute1 je definirana sa
[code:1]int MaCompute1 (Mapping1 M, domain1 d, range *rp) {
if(M == NULL){
printf("M je null\n");
return 0;
}
(...)
}
[/code:1]
Program ispiše
[code:1]R.M1 nije null
M je null
[/code:1]
i varijabla ima je nakon poziva MaCompute1 vrijednosti nula. Kako do toga dođe, da pokazivač R.M1 ipak ne pokazuje ni na što?
Ups, hvala. Nastavila bih gnjaviti ako smijem. U jednom trenutku program mi ulazi u
Kod: | void ReCompute2 (Relation R, domain1 d1, Set2 *S2p) {
SeMakeNull2(S2p);
rcelltype *p;
if (R.M1) //R.M1 je pokazivac na strukturu
printf("R.M1 nije null\n");
int ima = MaCompute1(R.M1, d1, &p);
if(!ima)
return;
(...)
}
|
a MaCompute1 je definirana sa
Kod: | int MaCompute1 (Mapping1 M, domain1 d, range *rp) {
if(M == NULL){
printf("M je null\n");
return 0;
}
(...)
}
|
Program ispiše
Kod: | R.M1 nije null
M je null
|
i varijabla ima je nakon poziva MaCompute1 vrijednosti nula. Kako do toga dođe, da pokazivač R.M1 ipak ne pokazuje ni na što?
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol: 
Lokacija: /sbin/init
|
Postano: 17:42 sub, 30. 1. 2016 Naslov: |
|
|
To sto pointer [i]negdje[/i] pokazuje, ne znaci da pokazuje gdje treba. Ako nije alociran i ako mu nisi direktno zadala da pokazuje na neku smislenu adresu, onda ce on ili biti [tt]NULL[/tt] ili ce pokazivati negdje bezveze. Recimo, ovaj program:
[code:1]#include <stdio.h>
int main(void) {
int *p;
printf("%p\n", p);
return 0;
}[/code:1]
na Linuxu ispise [tt](nil)[/tt], a na WinXP neku random adresu (konkretno, meni je ispisao [tt]7FFDF000[/tt] i jednom izvrsavanju, a [tt]7FFDE000[/tt] u drugom).
Stvar je ista kao s "obicnim" varijablama. Ako napravis:
[code:1]int x;
printf("%d\n", x);[/code:1]
racunaj da vrijednost [tt]x[/tt]-a nije definirana jer nigdje nisi rekla [tt]x = [i]nesto[/i];[/tt], ili [tt]scanf("...", &x);[/tt], ili nesto slicno. Moze ti se [i]desiti[/i] da je nula (npr. na Linuxu), a moze ispasti i neka skroz slucajna vrijednost koja se u trenutku stvaranja varijable zatekla na dijelu memorije koji je varijabli dodijeljen (npr. na Win).
Varijable tipa [tt]int[/tt] u sebi drze cijele brojeve, a pointeri drze adrese, no i jedno i drugo su samo nekakvi podaci i nema razloga da se razlicito ponasaju kad ih kreiras bez inicijalizacije.
To sto pointer negdje pokazuje, ne znaci da pokazuje gdje treba. Ako nije alociran i ako mu nisi direktno zadala da pokazuje na neku smislenu adresu, onda ce on ili biti NULL ili ce pokazivati negdje bezveze. Recimo, ovaj program:
Kod: | #include <stdio.h>
int main(void) {
int *p;
printf("%p\n", p);
return 0;
} |
na Linuxu ispise (nil), a na WinXP neku random adresu (konkretno, meni je ispisao 7FFDF000 i jednom izvrsavanju, a 7FFDE000 u drugom).
Stvar je ista kao s "obicnim" varijablama. Ako napravis:
Kod: | int x;
printf("%d\n", x); |
racunaj da vrijednost x-a nije definirana jer nigdje nisi rekla x = nesto;, ili scanf("...", &x);, ili nesto slicno. Moze ti se desiti da je nula (npr. na Linuxu), a moze ispasti i neka skroz slucajna vrijednost koja se u trenutku stvaranja varijable zatekla na dijelu memorije koji je varijabli dodijeljen (npr. na Win).
Varijable tipa int u sebi drze cijele brojeve, a pointeri drze adrese, no i jedno i drugo su samo nekakvi podaci i nema razloga da se razlicito ponasaju kad ih kreiras bez inicijalizacije.
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju. 
|
|
[Vrh] |
|
beeing Forumaš(ica)

Pridružen/a: 18. 09. 2014. (20:22:02) Postovi: (E)16
|
Postano: 0:35 ned, 31. 1. 2016 Naslov: |
|
|
No, komponente varijable R koju prima ReCompute2, R.M1 i R.M2, prije ovog dijela koda bile su proslijeđene redom funkcijama MaAssign1 i MaAssign2, gdje su memorije za njih bile uredno alocirane. Ali, kad provjeravam adrese pointera u ReCompute2, vidim zaista da jednom pokazuju na jednu stvar, a drugi put na drugu. :?
No, komponente varijable R koju prima ReCompute2, R.M1 i R.M2, prije ovog dijela koda bile su proslijeđene redom funkcijama MaAssign1 i MaAssign2, gdje su memorije za njih bile uredno alocirane. Ali, kad provjeravam adrese pointera u ReCompute2, vidim zaista da jednom pokazuju na jednu stvar, a drugi put na drugu.
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol: 
Lokacija: /sbin/init
|
Postano: 2:00 ned, 31. 1. 2016 Naslov: |
|
|
U [tt]MaAssign[/tt] funkcijama to izgleda ovako:
[code:1] (*Mp) = (mcelltype1*)malloc(sizeof(mcelltype1));
strncpy ((*Mp)->d, d, strlen(d));[/code:1]
[tt](*Mp)->d[/tt] je, u osnovi, [tt]char*[/tt]. Gdje se to alocira?
Preporucio bih setnju do demosa ili, ako oni ne postoje, do asistenta, pa debuggirajte zajedno. Ovakvo loptanje gdje svatko od nas napise nesto svakih nekoliko sati bi moglo potrajati.
U MaAssign funkcijama to izgleda ovako:
Kod: | (*Mp) = (mcelltype1*)malloc(sizeof(mcelltype1));
strncpy ((*Mp)->d, d, strlen(d)); |
(*Mp)→d je, u osnovi, char*. Gdje se to alocira?
Preporucio bih setnju do demosa ili, ako oni ne postoje, do asistenta, pa debuggirajte zajedno. Ovakvo loptanje gdje svatko od nas napise nesto svakih nekoliko sati bi moglo potrajati.
_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju. 
|
|
[Vrh] |
|
beeing Forumaš(ica)

Pridružen/a: 18. 09. 2014. (20:22:02) Postovi: (E)16
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3560)16
Spol: 
Lokacija: /sbin/init
|
|
[Vrh] |
|
beeing Forumaš(ica)

Pridružen/a: 18. 09. 2014. (20:22:02) Postovi: (E)16
|
|
[Vrh] |
|
|