Форум программистов, компьютерный форум CyberForum.ru

Запись значения в динамический массив - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Спасайте нуба http://www.cyberforum.ru/cpp-beginners/thread343010.html
Нужно до 7 утра уже сегодня видимо написать одну из трех программ. Судоку, Покер, Оргонайзер. При помощи классов. кто спасет....?
C++ Помогите решить ошибки при компиляции Вот такой код: // #include <iostream.h> #include <conio.h> #include <assert.h> template<class NODETYPE> class ListNode http://www.cyberforum.ru/cpp-beginners/thread343002.html
Вектор векторов C++
Вектор векторов - плюсы и минусы, альтернативы. Подскажите новичку) P.S. Внутри массив из 2х интов)
C++ Классы
Здравствуйте, а не подскажите может ли указатель базового класса указывать на наледника
C++ Непонятный приём строки http://www.cyberforum.ru/cpp-beginners/thread342990.html
Всем привет. Считываю строку с консоли: char* str = new char(); cin.getline(str, 80); cout<<str<<endl; Если вводить больше 24 символов, то почему-то выводятся только первые 24 символа и после них непонятно откуда взявшийся знак '!'. Пробовал считывать через gets(str) --- не помогло.
C++ int main() и int _tmain(int argc, _TCHAR* argv[]) При создании нового консольного приложения Microsoft Visual С++ 2010 Express создает начальный шаблон #include "stdafx.h" int _tmain(int argc, _TCHAR* argv) { return 0; } Можете объяснить разницу между простым int main() и тем что он предлагает int _tmain(int argc, _TCHAR* argv)(в принципе проверял работает и так и так)и что лучше использовать?(Только прошу попроще а то я только... подробнее

Показать сообщение отдельно
Enfernuz
22 / 22 / 1
Регистрация: 11.04.2011
Сообщений: 67
18.08.2011, 01:43
Ну по сути что происходит: Вы устанавливаете s = 0 и выделяете память под s+1 == 1 элемент:
C++
1
int  *tempnum3 = new int[s+1];
Потом в цикле делаете работу и при каком-то case пишете по адресу tempnum3+s+1 == tempnum3 + 1 значение z. При этом z пишется за границей массива.
Поправьте
C++
1
*(tempnum3+s+1) = z ;
на
C++
1
*(tempnum3+s) = z ;
и поставьте там breakpoint --- вполне возможно, что Вы до этой строчки не доходите в силу логики своего цикла.

Добавлено через 2 минуты
Хочу добавить, что при s == 0 запись tempnum3+s равносильна просто tempnum3. Если Вы изменяете s после строчки
C++
1
int  *tempnum3 = new int[s+1];
на отличное от нуля значение, а потом пытаетесь обратиться к s-тому элементу массива, то это неправильно --- массив был выделен под 1 элемент.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru