/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Problem med pointer til struct
Fra : Jakob Bro Nielsen


Dato : 11-12-02 21:22

Hej!

Jeg har følgende kode, som giver segmentation fault, når jeg (efterhånden
desperat) prøver at eksekvere det:

typedef struct sFusionPoints
{
int x[30];
int y[30];
} sFusPoints;

typedef struct sFusionPoints *sFusionPointsPtr;

sFusionPointsPtr test;

int main(void)
{
test->x = 1;

return 0;
}

Det jeg gerne vil er, at medgive en pointer til en struct som argument til
en funktion. Funktionen skal putte værdier i de to arrays x og y. Men når
jeg ikke engang kan finde ud af at skrive værdier i struct i main, ja så kan
jeg jo heller ikke i en funktion

Anyone - hvad gør jeg galt?

Med venlig hilsen

Jakob Bro Nielsen
(pt. Lissabon)



 
 
Kent Friis (11-12-2002)
Kommentar
Fra : Kent Friis


Dato : 11-12-02 22:31

Den Wed, 11 Dec 2002 21:21:57 +0100 skrev Jakob Bro Nielsen:
>Hej!
>
>Jeg har følgende kode, som giver segmentation fault, når jeg (efterhånden
>desperat) prøver at eksekvere det:
>
>typedef struct sFusionPoints
>{
> int x[30];
> int y[30];
>} sFusPoints;
>
>typedef struct sFusionPoints *sFusionPointsPtr;
>
>sFusionPointsPtr test;
>
>int main(void)
>{
> test->x = 1;
>
> return 0;
>}
>
>Det jeg gerne vil er, at medgive en pointer til en struct som argument til
>en funktion. Funktionen skal putte værdier i de to arrays x og y. Men når
>jeg ikke engang kan finde ud af at skrive værdier i struct i main, ja så kan
>jeg jo heller ikke i en funktion

Hvad peger test på?

Svar: ikke noget.

Prøv i stedet med:

int main(void)
{
sFusPoints q; /* create a variable */
test = &q; /* test point to q */
text->x = 1; /* q.x = 1 */
}

Mvh
Kent
--
6.0 FDiv 3.0 = 1.999773462873 - Intel Pentium bug

Jakob Bro Nielsen (11-12-2002)
Kommentar
Fra : Jakob Bro Nielsen


Dato : 11-12-02 21:45

Hej Kent!

> >typedef struct sFusionPoints
> >{
> > int x[30];
> > int y[30];
> >} sFusPoints;
> >
> >typedef struct sFusionPoints *sFusionPointsPtr;
> >
> >sFusionPointsPtr test;

> Hvad peger test på?
>
> Svar: ikke noget.

Jeg forstår det ikke! Hvorfor peger test ikke sFusionPoints, når jeg har
lavet

typedef struct sFusionPoints *sFusionPointsPtr; ?

Mit problem er, at jeg vil lave en funktion, der kan tage en pointer til en
struct som argument:

void funktion(EnStruct *data)
{
data->element[j]=1;
}

Men jeg kan ikke bringe det til at virke. Øv. Pointers ... i hate those
sons of bitches

Med venlig hilsen

Jakob



Kent Friis (11-12-2002)
Kommentar
Fra : Kent Friis


Dato : 11-12-02 22:58

Den Wed, 11 Dec 2002 21:44:57 +0100 skrev Jakob Bro Nielsen:
>Hej Kent!
>
>> >typedef struct sFusionPoints
>> >{
>> > int x[30];
>> > int y[30];
>> >} sFusPoints;
>> >
>> >typedef struct sFusionPoints *sFusionPointsPtr;
>> >
>> >sFusionPointsPtr test;
>
>> Hvad peger test på?
>>
>> Svar: ikke noget.
>
>Jeg forstår det ikke! Hvorfor peger test ikke sFusionPoints, når jeg har
>lavet
>
>typedef struct sFusionPoints *sFusionPointsPtr; ?

En pointer indeholder bare adressen på en anden variabel. Men du skal
have en anden variabel, som den kan pege på, og den skal have at vide
hvad den skal pege på.

>Mit problem er, at jeg vil lave en funktion, der kan tage en pointer til en
>struct som argument:
>
>void funktion(EnStruct *data)
>{
> data->element[j]=1;
>}

int main() {
EnStruct x;

funktion(& x);
printf("%d\n",x->element[j]); /* skulle gerne give 1 */
return 0;
}

Mvh
Kent
--
Mails skrevet før 12:00 skal læses med det forbehold, at hjernen først
forventes at være færdig med at boote på det tidspunkt, og indholdet
derfor kan indeholde random data der tilfældigvis lå i den
uinitializerede cache.

Byrial Jensen (11-12-2002)
Kommentar
Fra : Byrial Jensen


Dato : 11-12-02 23:10

Jakob Bro Nielsen <fisker@control.auc.dk> skrev:
> Hej Kent!
>
>> >typedef struct sFusionPoints
>> >{
>> > int x[30];
>> > int y[30];
>> >} sFusPoints;

"sFusPoints" erklæres her som et alternativt typenavn til
"struct sFusionPoints".

>> >typedef struct sFusionPoints *sFusionPointsPtr;

"sFusionPointsPtr" erklæres her som et alternativt typenavn til
"struct sFusionPoints *".

>> >sFusionPointsPtr test;

Du definerer her en pointer med navnet sFusionPointsPtr. Den
initialiseres ikke.

> Jeg forstår det ikke! Hvorfor peger test ikke sFusionPoints, når jeg har
> lavet
>
> typedef struct sFusionPoints *sFusionPointsPtr; ?

Der er ikke noget som hedder "sFusionPoints". Der er kun noget
som hedder "struct sFusionPoints", og det er et typenavn. Ikke
noget som en variabel kan pege på.

Din variabel peger ikke på noget fordi du hverken har
initialiseret den eller tildelt noget til den.

> Mit problem er, at jeg vil lave en funktion, der kan tage en pointer til en
> struct som argument:
>
> void funktion(EnStruct *data)
> {
> data->element[j]=1;
> }

void funktion1 (sFusionPointsPtr data)
{
data->x[10] = 1;
}
void funktion2 (struct sFusionPoints *data)
{
data->y[20] = 5;
}
void funktion3 (sFusPoints *data)
{
data->x[7] = 15;
}

Alle 3 funktuioner har samme type blot skrevet på forskellige
måder.

Byrial Jensen (11-12-2002)
Kommentar
Fra : Byrial Jensen


Dato : 11-12-02 22:56

Kent Friis <leeloo@phreaker.net> skrev:
> Den Wed, 11 Dec 2002 21:21:57 +0100 skrev Jakob Bro Nielsen:
>>
>>typedef struct sFusionPoints
>>{
>> int x[30];
>> int y[30];
>>} sFusPoints;
>>
>>typedef struct sFusionPoints *sFusionPointsPtr;
>>
>>sFusionPointsPtr test;

> Prøv i stedet med:
>
> int main(void)
> {
> sFusPoints q; /* create a variable */
> test = &q; /* test point to q */
> text->x = 1; /* q.x = 1 */
> }

Lige en ting til. Man kan ikke tildele et tal til et array.
Prøv i stedet for sidste linje:

test->x[0] = 1; /* q.x[0] = 1 */

Kent Friis (11-12-2002)
Kommentar
Fra : Kent Friis


Dato : 11-12-02 23:07

Den Wed, 11 Dec 2002 21:56:27 GMT skrev Byrial Jensen:
>Kent Friis <leeloo@phreaker.net> skrev:
>> Den Wed, 11 Dec 2002 21:21:57 +0100 skrev Jakob Bro Nielsen:
>>>
>>>typedef struct sFusionPoints
>>>{
>>> int x[30];
>>> int y[30];
>>>} sFusPoints;
>>>
>>>typedef struct sFusionPoints *sFusionPointsPtr;
>>>
>>>sFusionPointsPtr test;
>
>> Prøv i stedet med:
>>
>> int main(void)
>> {
>> sFusPoints q; /* create a variable */
>> test = &q; /* test point to q */
>> text->x = 1; /* q.x = 1 */
>> }
>
>Lige en ting til. Man kan ikke tildele et tal til et array.
>Prøv i stedet for sidste linje:
>
> test->x[0] = 1; /* q.x[0] = 1 */

Hehe, det opdagede jeg slet ikke. Jeg svarede kun på det han spurgte
om

Mvh
Kent
--
Avoid the Gates of Hell. Use Linux
(Unknown source)

Torben W. Hansen (11-12-2002)
Kommentar
Fra : Torben W. Hansen


Dato : 11-12-02 23:28

Prøv dette...

#include <iostream>
#include <stdlib.h>

struct sFusionPoints
{
int x[30];
int y[30];
};


void funktion(sFusionPoints *data) // data er en pointer til strukturen
{
for (size_t j=0; j<30; j++)
{
data->x[j] = j;
data->y[j] = 2*j;
std::cout << "(x,y) = (" << data->x[j] << ","<< data->y[j] << ")\n";
}
}

int main(void)
{
sFusionPoints test; // erklaer struktur variabel

funktion(&test); // tag adressen på vaiablen med som parameter
return 0;
}


Med venlig hilsen
Torben W. Hansen



Jakob Bro Nielsen (13-12-2002)
Kommentar
Fra : Jakob Bro Nielsen


Dato : 13-12-02 10:51

Fik det til at virke med tilføjelsen af:

test = (sFusionPointsPtr) malloc(sizeof(sFusPoints));

"Jakob Bro Nielsen" <fisker@control.auc.dk> skrev i en meddelelse
news:at8aab$c45$1@sunsite.dk...
> Hej!
>
> Jeg har følgende kode, som giver segmentation fault, når jeg (efterhånden
> desperat) prøver at eksekvere det:
>
> typedef struct sFusionPoints
> {
> int x[30];
> int y[30];
> } sFusPoints;
>
> typedef struct sFusionPoints *sFusionPointsPtr;
>
> sFusionPointsPtr test;
>
> int main(void)
> {
> test->x = 1;
>
> return 0;
> }
>
> Det jeg gerne vil er, at medgive en pointer til en struct som argument til
> en funktion. Funktionen skal putte værdier i de to arrays x og y. Men når
> jeg ikke engang kan finde ud af at skrive værdier i struct i main, ja så
kan
> jeg jo heller ikke i en funktion
>
> Anyone - hvad gør jeg galt?
>
> Med venlig hilsen
>
> Jakob Bro Nielsen
> (pt. Lissabon)
>
>



Søg
Reklame
Statistik
Spørgsmål : 177500
Tips : 31968
Nyheder : 719565
Indlæg : 6408518
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste