Mi a baj? (c nyelv :tömbök)
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??
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.
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]
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;
}
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:):)
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!