Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 01.01.2016
Сообщений: 3

О работе new, почему выходит ошибка?

01.01.2016, 10:35. Показов 661. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делал задачи на степеке, не могу понять следующий момент:
Вылезает ошибка такая же если в массив добавить больше символов чем его размер.
Почему то запись new (указатель) не работает (а с realloc-ом все впорядке), разве это не равнозначные функции? И даже если удалить это new по указателю, то все равно после delete вылезают один два символа, почему так? И как делать правельно?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
using namespace std;
 
int main(){
  int i = 99;
  char *p = new char[1];
  char *u = new char[100];
  copy(p, p+i, u);
  delete [] p;
  p = new char[100];
  copy(u, u+i, p);
  delete [] u;
 
  do {
    p = new (p) char [160];  // If we change 160 to 100 : p = new (p) char [100]; 
    p[i+30]='s';                    // and 30 to 0 :  p[i]='s'; 
  }
  while (--i);
  p[0] = 's';
 
 cout<<p;
 delete [] p;
 
 i=10;
 while (--i)
 cout<<"\n DEL "<<p[i]<<' '<<i;
 
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.01.2016, 10:35
Ответы с готовыми решениями:

ошибок в компиляции нет, а при работе выходит ошибка, почему?
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; const int n=2; struct a1{ //объявляем структуру char...

Почему выходит эта ошибка?
&quot;Калькулятор_путевок_v_0._1.Form1&quot; не содержит определения для &quot;comboBox1_SelectedIndexChanged&quot; и не был найден метод расширения...

Почему выходит ошибка (структура)
Цель: Создать структуру с данными телефона (модель - ОС - цена) Позже подключу сортировку. Код компилируется, программа запускается,...

5
Хитрая блондиночка $)
 Аватар для Hikari
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
01.01.2016, 10:58
Цитата Сообщение от ffbskt Посмотреть сообщение
как делать правельно?
А как задача-то звучит?
0
0 / 0 / 0
Регистрация: 01.01.2016
Сообщений: 3
01.01.2016, 11:17  [ТС]
Основная задача сделать getline(). А это подзадача, динамически выделять память под вводимую строку, записать ее вывести и полностью потом очистить выделенную память. Символы тоже по очереди поступают
0
Хитрая блондиночка $)
 Аватар для Hikari
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
01.01.2016, 12:01
Знаешь, я бы на твоем месте делала буфферизацию...
Создала бы список, элементом которого был бы массив в... 100 символов. Ввод строки блоками по 100 символов. Ка к только одного слябчика перестает хватать для строки, создается еще один в списке, куда продолжается ввод.
А в конце формировала бы основной массив, в который бы уже из этого динамического списка данные и перегоняла.
Слябами работать проще. Да и писанины не так уж и много.
0
0 / 0 / 0
Регистрация: 01.01.2016
Сообщений: 3
01.01.2016, 12:16  [ТС]
А ты пробовала запускать? разве не мистика какая то творится? Вот еще пример:
Если ввести: рррррррр то ок
А если : ррррррррррррррррррррррррррррррррррр то ошибка при delete[]
И интересно почему через один на конце строки странные символы получаются...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <cstdio>
 
using namespace std;
 
char *getline() {
    int i = 0;
    char * tmp = new char[1];
 
    while (cin.get(tmp[i]) && (tmp[i] != '\n') && tmp[i] != EOF && tmp[i] != '\0') {
        i++;
        tmp[i] = '\0';
 
    cout<<' '<<tmp<<'\n',
        tmp = new (tmp) char[i];
    }
 
    return tmp;
}
 
 
int main(){
char *p = getline();
cout<<p;
delete [] p;
cout<<'D'<<p;
}
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
01.01.2016, 12:29
Цитата Сообщение от ffbskt Посмотреть сообщение
Почему то запись new (указатель) не работает
Эта запись только вызывает конструктор (которого у char все равно нет). new/delete не умеют реалокацию, нужно либо откатываться на malloc/realloc/free, либо использовать цепочку "выделил новый массив, скопировал в него старый, прибил старый, вернул указатель на новый". Ну, есть еще std::vector умеющий resize, но как я понимаю, в данном случае это не спортивно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.01.2016, 12:29
Помогаю со студенческими работами здесь

Посмотрите пожалуйста, почему ошибка выходит?
как исправить? вот ошибка - исходник :

почему это ошибка выходит -- #имя -
спасибо

Почему выходит ошибка в Visual studio С++ 2010?
Вышла такая ошибка при компиляции: 1&gt;c:visual studio 2010\projects\метод якоби\meth.cpp(6): error C4430: отсутствует спецификатор типа -...

Пожалуйста, объясните, почему выходит эта ошибка
Объясните, почему выходит эта ошибка: Traceback (most recent call last): File...

Почему при выводе категории выходит ошибка № 404
Здравствуйте. У меня такая замарочка появилась. в разделе 3 категории, 2 нормально высвечиваются, а на третьей выдает такую ошибку. смотрю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru