|
| 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)
>
>
| |
|
|