Смотри, по-моему, ты выделил память для * c несколько раз как
for (int i=0; i<2; i++)
c = new Test(i);
Посмотрите на этот код, который все прояснит
for (int i=0; i<2; i++)
{ c = new Test(i); } /*see , here the loop goes for i=0; then
for i=1; which basically overwrites what c will have
i.e. finally c = new test(1); */
c->print(); /* works fine , gives value of i=1 */
c[0].print(); /* as expected , this prints i=1 as well... */
c[1].print(); /*clearly, it will give a garbage value */
delete c;
Но, по-моему, было бы лучше заменить
for (int i=0; i<2; i++)
{ c = new Test(i); }
с
c = new Test(1); //as the previous code is doing the same in for loop but that was consuming more resources
Так что, если вы хотите выводить как i = 0, а затем i = 1, то сделайте так -
c = new int(0);
c->print(); /* works fine , gives value of i=0 */
c[0].print(); /* as expected , this prints i=0 as well... */
delete c;
c = new int(1);
c->print(); /* works fine , gives value of i=1 */
c[0].print(); /* as expected , this prints i=1 as well... */
delete c;
Приведенный выше код - это то, что полностью удовлетворит ваши потребности.