Kezdőoldal » Számítástechnika » Programozás » Mi a baj? (c nyelv :tömbök)

Mi a baj? (c nyelv :tömbök)

Figyelt kérdés

létrehoztam ey tömböt és úgy csináltam meg hogy be lehessen állítani a tömb méretét és megy is csak ha 10 vagy a fölé megy a tömb mérete akkor k.o. :

#include<stdio.h>

main()

{

int a,b,c;

a=0; /* ez azért van mert kell a tömb mérete később*/

int d[a];

scanf("%d",&a); /* így meglehet adni a tömb méretét*/

for (b=1;b<=a;b++)

{

scanf("%d",d[b]);

}

...

és itt meghal!!

ha a tömb méretének 10 alatti számot adok akkor az összeset bekéri tökéletesen de ha 10 fölötti vagy 10 akkor már nem mert már a 10. elemnél bepusztul és hibát észlel!!!

miért??

egy tömb nemlehet 10 elemú


vagy ide már több dimenziós tömb kell??


2010. dec. 29. 14:58
 1/5 anonim ***** válasza:
100%

Véleményem szerint így nem lehet dinamikus méretű tömböt deklarálni. Amikor deklarálod a tömböt, meg kell adni a méretét (pl int x[10], vagy változóval vagy konstanssal). Dinamikus tömböt memória allokációval lehet létrehozni. Ha jól értelmezem a fenti kódban a tömb akkora lesz, amekkora memóriaszemét értéket az "a" változó tárol.


Megjegyzem én tömb feltöltésénél a for ciklusokat minden nyelven 0-ról indítom, mert így a 0. elem nem kap értéket.

2010. dec. 29. 15:15
Hasznos számodra ez a válasz?
 2/5 anonim ***** válasza:
75%

Nem vagyok C guru, de szerintem jobb ötletnek tűnik ha 'a' értékének bevitele után a tömbnek lefoglalnád a memóriát.


Ahogy én sejtem a kódodban:

'a' egy nulla értékű konstans

'd' egy nulla (vagyis egy) elemszámú tömb

Az "int d[a];" sor után a értékét már hiába változtatod előbb vagy utóbb (nálad éppen 10. elemnél) memória hozzáférési hiba lesz az eredmény...


Arrays in C/C++: [link]

2010. dec. 29. 15:18
Hasznos számodra ez a válasz?
 3/5 anonim ***** válasza:

Dinamikus tömböt malloc-kal szokás csinálni, pl:


#include <stdio.h>

#include <malloc.h>


int main() {

int count, szam, i;


printf("Mennyi legyen a tömb mérete? ");

scanf("%d", &count);

int *dt = (int*) malloc(sizeof(int) * count);


for (i=0; i < count; i++) {

printf("%d. elem: ",i+1);

scanf("%d", &szam);

dt[i] = szam;

}


for (i=0; i < count; i++) {

printf("%d. elem: %d\n", i+1, dt[i]);

}

return 0;

}

2010. dec. 29. 15:18
Hasznos számodra ez a válasz?
 4/5 A kérdező kommentje:

hát ezt a mallocos ízét nemértem mert még nem tanultam róla

de köszi a kódot kipróbálom:):)

2010. dec. 30. 15:56
 5/5 anonim ***** válasza:
Annyi kiegészítést tennék a kettővel ezelőtti hozzászóláshoz, hogy itt C-ről van szó és menet közben nem lehet változót deklarálni, valamint a malloc() függvény használatához az "stdlib.h"-t kell include-álni.
2010. dec. 31. 02:23
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!