Hiba nélkül lefordítja, de már nem futtatja? (C++)
A program nagyon egyszerű, csak két sorozatot szeretnék megadni, de a futtatást már nem éri meg, "main.exe működése leállt"-ot ír ki a képernyőre. Debugging-ra pedig azt írja ki, hogy "Program received signal SIGSEGV, Segmentation fault"
#include <iostream>
using namespace std;
int main()
{
//bekérés
int n,m;
int v1[n];
int v2[m];
//1. sorozat
do{
cout << "Kerem az 1. sorozat elemeinek szamat: ";
cin >> n;}
while(n<=0);
for(int i=0;i<n;i++){
cout << i+1 << ". elem: ";
cin >> v1[i];
}
//2. sorozat
do{
cout << "Kerem a 2. sorozat elemeinek szamat: ";
cin >> m;}
while(m<=0);
for(int i=0;i<m;i++){
cout << i+1 << ". elem: ";
cin >> v2[m];
}
return 0;
}
Köszi a segítséget!
int n,m;
int v1[n];
int v2[m];
Ez a definíció annyira rossz, hogy csoda, hogy egyáltalán sikerült lefordítani. Kap az n és az m valami kezdőértéket, ami jó esetben nulla, rossz esetben teljesen random, ami épp a memóriában ott van. Aztán ezzel definiálsz tömb méretet. Aztán ebbe a potenciálisan nulla méretű tömbbe elkezdesz adatokat írni. Csoda, hogy összeomlik a program?
#7 Dinamikus tömb, mint olyan, nincs a nyelvben. Legfeljebb olyan adatszerkezetet lehet létrehozni, ami kívülről dinamikus, de a belső szerkezete akkor is a konstans méretű tömbökre építkezik. (Persze most tömbökről, és társairól beszélünk, a listaszerkezet más téma)
#5 A GCC nem hülye, csak a standard nem tiltja ezt a működést, ezért nem utasítja el. Alighanem dob rá viszont warningot, csak a kérdező -Wall -Wextra flagek nélkül fordít.
Megfelelő flagekkel minden fordító ír rá valami hasonlót:
main.cpp:41: warning: variable length arrays are a C99 feature [-Wvla-extension]
int v1[n];
^
Az esetek nagyrészében ha fordításnál ismert a tömbméret akkor std::array, amúgy std::vector
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!