- 16,335
- 258
mathmari said:Code:int ffplanpos=-1; ... for(i=0; i<max; i++){ if(StarS[j].ffplan[i] == INT_MAX){ ffplanpos=i; } } if(ffplanpos == -1){ return -1; }
Is it better now?? (Wondering)
Yep! (Smile)
mathmari said:Code:int ffplanpos=-1; ... for(i=0; i<max; i++){ if(StarS[j].ffplan[i] == INT_MAX){ ffplanpos=i; } } if(ffplanpos == -1){ return -1; }
Is it better now?? (Wondering)
I like Serena said:Yep! (Smile)
mathmari said:When I compile it I get an error at the line [m]if(StarS[j].ffplan == INT_MAX){[/m]
[m]error: invalid operands to binary ==[/m]
What does this mean?? (Wondering)
I like Serena said:It means that we cannot compare StarS[j].ffplan to INT_MAX.
Is StarS[j].ffplan an integer?
Or is it perhaps a structure from which we should select a data member? (Wondering)
int ffplanpos=-1;
...
for(i=0; i<max; i++){
if(StarS[j].ffplan[i].fp == INT_MAX){
ffplanpos=i;
}
}
if(ffplanpos == -1){
return -1;
}
StarS[j].ffplan[ffplanpos].fp=solid;
mathmari said:It is a structure which has the fields [m]fp[/m] (Identifier of the free-floating planet) and [m]ff[/m] (Pointer to the first node of the list of the free-floating planets).
So do we have to write it as followed??
Code:int ffplanpos=-1; ... for(i=0; i<max; i++){ if(StarS[j].ffplan[i].fp == INT_MAX){ ffplanpos=i; } } if(ffplanpos == -1){ return -1; } StarS[j].ffplan[ffplanpos].fp=solid;
(Wondering)
I like Serena said:I do not understand yet what [m]ff[/m] should represent, but yes, your code looks correct now. (Smile)
mathmari said:[m]ff[/m] is a pointer of type asteroid_t to the first element of a doubly linked list. This list is the list of the free-floating planets of the collection of the free-foating planets with identifier fp. Each element of the list of the free-floating planets of a collection of free-floating planets is a struct of type asteroid_t.
int destruction(int solid, int gap){
int ffplanpos=-1;
int i, j;
int sum=0;
asteroid_t *planf = calloc(1, sizeof(asteroid_t));
asteroid_t *K=NULL;
asteroid_t *f=NULL;
plansys_t *p=StarS[0].plasy;
for(i=0; i<Sfreep; i++){
p=StarS[i].plasy;
while (p != NULL && p->solid != solid){
p=p->next;
j=i;
}
}
if(p == NULL){
printf("The planetary system with identifier %d couldn't be found\n", solid);
return -1;
}
f=p->asteroids;
while(sum<gap){
sum=sum+f->gap;
f=f->next;
DELETE(f->prev, f->prev->as);
}
for(i=0; i<max; i++){
if(StarS[j].ffplan[i].fp == INT_MAX){
ffplanpos=i;
}
}
if(ffplanpos == -1){
return -1;
}
StarS[j].ffplan[ffplanpos].fp=solid;
planf->as=f->as;
planf->gap=0;
planf->next=NULL;
planf->prev=NULL; f=f->next;
while(f != NULL){
if (StarS[j].ffplan[ffplanpos].ff == NULL) {
StarS[j].ffplan[ffplanpos].ff = planf;
} else {
asteroid_t *last = StarS[j].ffplan[ffplanpos].ff;
while (last->next != NULL) {
last = last->next;
}
last->next = planf;
}
f=f->next;
}
printf("\n\nPlanet Systems = ");
while(StarS[j].plasy != NULL){
printf(" %d ", StarS[j].plasy->solid);
StarS[j].plasy=StarS[j].plasy->next;
}
printf("\n\nFree-floatingM = ");
for(i=0; i<ffplanpos; i++){
printf(" %d ", StarS[j].ffplan[i].fp);
}
printf("\n\nFree-floating planets = ");
printf("\n\n %d ", StarS[j].ffplan[0].ff->as);
for(i=0; i<=ffplanpos; i++){
while(StarS[j].ffplan[i].ff != NULL){
printf(" %d ", StarS[j].ffplan[i].ff->as);
StarS[j].ffplan[i].ff=StarS[j].ffplan[i].ff->next;
}
}
return 0;
}
mathmari said:When I compile the program I get a segmentation fault...
What could I have done wrong?? (Wondering)
I like Serena said:Where do you get the segmentation fault? (Wondering)
One of the ways to find out, is to run:
[m]\$ gdb stars
(gdb) r
<crash>
(gdb) bt[/m]
This will show where the program was, and where it was coming from when the segmentation fault occurred. (Wasntme)
mathmari said:When I write [m]r[/m] I get :
[m] Starting program:
No executable specified, use 'target exec'.[/m]What does this mean?? (Wondering)
Also what am I supposed to write at the point [m]<crash>[/m] ?? (Wondering)
I like Serena said:What is the name of your program? (Wondering)
That's what you should type after gdb in the first line.
mathmari said:Should I write [m](gdb) main[/m] or [m](gdb) stars[/m] or something else that contains both of them?? (Wondering)
I like Serena said:Which command do you use to build your program? (Wondering)
Let's assume it is [m]gcc stars.c[/m].
mathmari said:I compile the program using the following:
[m]gcc main.c stars.c[/m]
(Wondering)
I like Serena said:Then you will also get [m]a.out[/m] as resulting executable.
So the way to use gdb is the same. (Mmm)
mathmari said:So, should I write the following commands??
[m]gcc main.c stars.c
gdb a.out
(gdb) r[/m]
(Wondering)
I like Serena said:Hold on.
You need to compile with [m]gcc -g main.c stars.c[/m]
What do you get when you do? (Wondering)
mathmari said:Do you mean that after [m]gcc -g main.c stars.c[/m] I should write
[m]gdb a.out
(gdb) r[/m] ?? (Wondering)
I like Serena said:Yes...
mathmari said:When I write the command [m]gdb a.out[/m] I get:
[m]a.out: No such file or directory.[/m]
(Wondering)
mathmari said:I wrote [m]gdb a.exe[/m].
Then I wrote the command [m](gdb) r[/m] and I get the following:
[m]Starting program: /cygdrive/c/cygwin/a.exe
[New thread 3764.0x50c]
Error: dll starting at 0x76c60000 not found.
Error: dll starting at 0x75c30000 not found.
Error: dll starting at 0x76c60000 not found.
Error: dll starting at 0x76b60000 not found.
[New thread 3764.0x4c4]
Usage: /a <input_file>
Program exited with code 01.[/m]
What does this mean?? (Wondering)
I like Serena said:Did you compile with [m]-g[/m]? (Wondering)
mathmari said:Yes, I compiled it as followed:
[m]gcc -g main.c stars.c[/m]
I like Serena said:What do you get if you type [m]gcc -v[/m]? (Wondering)
mathmari said:Do you mean that I have to type [m]gcc -v[/m] without [m]main.c stars.c[/m] ?? (Wondering)