/ 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
problemer med arrays
Fra : sune vuorela


Dato : 08-11-03 22:08

Hjesa!

jeg er ved at skrive et simpelt program... det vil bare desværre ikke
som jeg vil...

Det kompilerer fint (bruger bloodshed dev-c++)

det vil desværre ikke køre...

prøver jeg debuggeren får jeg en fjel:
An access violation (segmentation fault) raised in your program

men jeg har ingen ide om hvad der er galt - eller jo - det må være
noget med arrays, men hvad?
jeg har lige tilføjet kodelinierne indtil der hvor det går galt:

+++kode start+++


#include <stdio.h>
#include <math.h>

main()
{
      int antal = 10; //det antal forskellige tal som der
gemmes i
      int gennemloeb = 1000; //det antal som funktionen
løber i gennem
      int tal[antal]; //et array som holder værdierne
      int i;
      
      for (i=0;i<antal;i++)
      {
      tal[i]=0;
      }

+++kode slut+++

det er der hvor jeg skriver tal[i]=0; den stopper. kan nogen finde
fejlen?

--
Sune      

 
 
Bertel Brander (08-11-2003)
Kommentar
Fra : Bertel Brander


Dato : 08-11-03 23:10

sune vuorela wrote:
> Hjesa!
>
> jeg er ved at skrive et simpelt program... det vil bare desværre ikke
> som jeg vil...
>
> Det kompilerer fint (bruger bloodshed dev-c++)
>
> det vil desværre ikke køre...
>
> prøver jeg debuggeren får jeg en fjel:
> An access violation (segmentation fault) raised in your program
>
> men jeg har ingen ide om hvad der er galt - eller jo - det må være
> noget med arrays, men hvad?
> jeg har lige tilføjet kodelinierne indtil der hvor det går galt:
>
> +++kode start+++
>
>
> #include <stdio.h>
> #include <math.h>
>
> main()
> {
>       int antal = 10; //det antal forskellige tal som der
> gemmes i
>       int gennemloeb = 1000; //det antal som funktionen
> løber i gennem
>       int tal[antal]; //et array som holder værdierne
>       int i;
>       
>       for (i=0;i<antal;i++)
>       {
>       tal[i]=0;
>       }
>
> +++kode slut+++
>
> det er der hvor jeg skriver tal[i]=0; den stopper. kan nogen finde
> fejlen?
>

Jeg kan ikke se nogen fejl i ovenstående. Jeg tror fejlen er et andet
sted.

Prøv at poste dete mindst mulige program som viser fejlen.

/b


Thomas Krog (08-11-2003)
Kommentar
Fra : Thomas Krog


Dato : 08-11-03 23:17

ved denne linje skal antal være kendt på oversættelses tidspunktet.
> int tal[antal]; //et array som holder værdierne

prøv at rette linjen:
> int antal = 10; //det antal forskellige tal som der

til:
const int antal = 10; //det antal forskellige tal som der

jeg har hørt om andre der har haft den imo. lidt mærkelige fejl - burde
oversætteren ikke give en fejl?



sune vuorela (09-11-2003)
Kommentar
Fra : sune vuorela


Dato : 09-11-03 00:08

En der kalder sig sune vuorela <nospam@vuorela.dk> skrev:



>prøver jeg debuggeren får jeg en fjel:
>An access violation (segmentation fault) raised in your program


jeg fandt fjelen... jeg forsøgte at gemme noget for langt ude i et
array.

jeg havde troet at rand() returnerede en float mellem 0 og 1 - men det
er ikke tilfældet.

jeg forstår dog ikke hvorfor debuggeren meldte fejl hvor den gjorde...

men det lykkedes.

--
Sune

Per Pedersen (09-11-2003)
Kommentar
Fra : Per Pedersen


Dato : 09-11-03 00:10

Hej Sune

> jeg er ved at skrive et simpelt program... det vil bare desværre ikke
> som jeg vil...

Det er vi mange der også har prøvet før

> An access violation (segmentation fault) raised in your program

Kan du få din debugger til at give dig et register dump, eller endnu bedre,
gøre det step by step, da fejlen jo tyder på, at programmet har fat i et
stykke hukommelse, som det ikke har råderet over. En forudsætning for at
kunne bruge det til noget, er selvfølgeligt at du kender til memory mappen i
din OS.

Jeg kan heller ikke se at der skulle være noget galt i din kode, men har du
prøvet et alternativ til for-løkken, F.eks.

-Kodefragment Start-

int i = 10;
do
{
printf("Entered, i is %d", i); // For debugging only
tal[i] = NULL; // Clear an element
i--; // Decrement counter
printf("Leaving, i is %d", i); // For debugging only
}
while(i);

-Kodefragment End-

Hvilket jo gerne skulle give dig det samme resultat, og er det tilfældet,
altså fejlmeldingen, så må det jo være i compiler, eller linker options, at
der er noget galt.

Du kan også prøve at allokere dit array dynamisk, og bruge en pointer som du
så tæller [sizeof(int)] bytes op for hvert element du nulstiller, for at se
om ikke det så gør en forskel.

Jeg er nu heller ikke den store ekspert i det her, men jeg håber at det vil
kunne hjælpe dig lidt på vej.

Mvh

Per Pedersen



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste