Informatică, întrebare adresată de mateisr, 8 ani în urmă

De ce imi da caught fatal signal 11? Problema este Bac_Cuvinte #3112. Doar sa ziceti unde am gresit.
#include
#include
using namespace std;

int lun(char d[], int n)
{
int i = 0;
while(d[i]!=NULL)
i++;
if(i == n)
return 1;
else
return 0;
}
int main()
{
int n,c=0;
char s[99],*p,sep[]=" ";
cin.getline(s, 99);
cin >> n;
int i = 0;
p=strtok(s,sep);
if(lun(p,n)==1)
{
cout<

Răspunsuri la întrebare

Răspuns de radu9614
0

Răspuns:

Fatal signal 11 inseamna ca ai accesat ceva ce nu exista in memorie. In cazul asta, sunt destul de sigur ca problema este la cin.getline. Pt functia aia este bine sa iti iei un element in plus in vector, pentru ca e posibil sa acceseze pana la n + 1. Incearca sa pui s[ 100 ] sau [ 101 ]. Daca nu merge asta spune-mi si ma mai gandesc.

Explicație:


mateisr: nu, am incercat si pana a 102 si nu a mers
radu9614: incearca sa mai maresti si la cin.getline acolo in interiorul functiei
radu9614: pune 100 sau 101 sau ceva
radu9614: De fapt, e posibil sa fie altceva. Tu in functia lun mergi pana cand d[ i ] nu e null, dar asta nu prea e bine. In cazul in care d[ i ] e null, tu l-ai accesat deja, adica ai accesat ceva null, ceea ce nu e bine. Incearca in schimb sa faci un for.
radu9614: Sau, in loc de for sa mergi cu -> next si sa verifici daca e null, oricum nu e bine sa accesezi d[ i ] cand e null
Alte întrebări interesante