Problem z działaniem programu sumującego wartości tablicy dynamicznej

0

Witam,
Dopiero zaczynam przygodę z C++ i natkałem się na błąd z wykonywaniem programu. Napisałem prosty program, który przyjmuje od użytkownika liczby, po czym je sumuje. Program działa ale tylko do 6-ciu liczb, tzn wpisując 7 i więcej program się zawiesza. Co może być przyczyną?

#include <iostream>
#include <math.h>
#include <cstdlib>

using namespace std;

int main() {
int suma;
int a,b;
int *tablica = new int;
cout<<"Podaj ilosc liczb ";cin>> a;
for(int i=0;i<a;i++){
	cout<<"Podaj liczbe "<<i+1<<endl;
	cin>> b;
	tablica[i]=b;
}

for(int i=0;i<a;i++){
suma+=*(tablica+i);	
}
cout<<" Suma = "<<suma;
delete tablica;
return 0; 
}
0

Piszesz po nieswojej pamięci. int* tablica = new int alokuje dokładnie jeden int a Ty później próbujesz wpisać drugi, trzeci, itd.
Najpierw pobierz rozmiar tablicy a dopiero później ją utwórz.

int rozmiar;
cin >> rozmiar;
int* tablica = new int[rozmiar];
0

Jednak to nie jest zalecany sposób, w C++ nie powinno się korzystać z operatora new, no chyba że uczysz się wskaźników i ręcznego zarządzania pamięcią, to wtedy ok.
Bo w normalnym zastosowaniu powinieneś skorzystać z jakiegoś kontenera np. std::vector.

Kolejna rzecz:
int suma;

Stworzyłeś zmienną na sumę, ale nie zainicjalizowałeś jej żadną wartością, przez co przechowuje ona jakąś śmieciową wartość i dziwne, że w ogóle sumowanie u Ciebie działa, bo nie powinno. Zainicjalizuj tę zmienną wartością 0, jeśli ma w niej być zapisywana suma elementów.

0
tajny_agent napisał(a):

Piszesz po nieswojej pamięci. int* tablica = new int alokuje dokładnie jeden int a Ty później próbujesz wpisać drugi, trzeci, itd.
Najpierw pobierz rozmiar tablicy a dopiero później ją utwórz.

int rozmiar;
cin >> rozmiar;
int* tablica = new int[rozmiar];

Cenne uwagi! Dzięki!!!

0
#include <iostream>
using namespace std;

int main()
{
	size_t size;
	cout<<"Podaj ilosc liczb: ", cin>>size;
	cout<<"Podaj "<<size<<" liczb:"<<endl;
	int sum=0,value;
	for(size_t i=0;(i<size)&&(cin>>value);++i) sum+=value;
	cout<<" Suma = "<<suma<<endl;
	return 0; 
}
2

na przyszłość. Zaznajom się z pojęciem: debugger

1 użytkowników online, w tym zalogowanych: 0, gości: 1