Witam, mam problem z poniższym kodem
#include <iostream>
#include <string>
using namespace std;
int main()
{
string napis;
while(1)
{
int wielkosc_tablicy;
char * tablica_znakow = NULL;
cin>>wielkosc_tablicy;
tablica_znakow = new char [wielkosc_tablicy];
for (int i =0; i<wielkosc_tablicy; i++)
{
if ((i+1)%2 == 0) // dowolny kod zapisujacy znak do tablicy
tablica_znakow[i] = '_';
else
tablica_znakow[i] = '-';
}
tablica_znakow[wielkosc_tablicy] = '\0';
napis = tablica_znakow;
cout << napis <<endl;
delete [] tablica_znakow;
}
}
(proszę nie zwracać uwagi na nieskończoną pętle, specjalnie dałem taką na potrzeby testów)
po uruchomieniu, program przez jakiś czas działa normalnie tzn. pobiera wartość i zwraca ciąg znaków. Niekiedy w losowych momentach po wpisaniu specyficznej liczby (głównie liczby 16, 32 ale nie tylko), program przestaje odpowiadać.Nie ma określonej reguły na to jak trzeba wpisać te liczby, ani za którym razem program przestanie działać. Co ciekawe, przy debugowaniu wszystko działa bez zarzutów, nawet przy specyficznych liczbach. Moje pytania to:
1. Czy sposób w jaki przypisuje dynamiczną tablicę do zmiennej string jest poprawny?
2. Co może być (lub jest) przyczyną takiego zachowania?
Dodam jeszcze że podobny kod był uruchamiany przez Code::blocks wersja 17.12 i Dev-c++ (nie wiem czy ma to jakieś znaczenie), na dwóch różnych komputerach i efekt jest ten sam.