Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.60
Suslik73
2 / 2 / 1
Регистрация: 11.10.2009
Сообщений: 52
#1

Выделение и удаление памяти, выделенной для динамической строки - C++

11.03.2010, 20:49. Просмотров 2665. Ответов 8
Метки нет (Все метки)

Данная функция производит ввод и собственно контроль ввода (размер массива от 1 до 20, иначе должна выдавать ошибку; при вводе букв также должна выдавать ошибку)
Также поэтому я использую ДДинамическую строку(ну чтоб можно было ввести оооочень длинную строку)
Но не в этом суть.
Программа не работает, и видимо дело в этом:

delete size;//с этой строкой прога зависает или же вылетает; если убрать эту строку, то прога работает,но конечно c detected memory leaks;

Хотя точно не знаю

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
29
int getSize() {
    char *size = new char[];
    bool er = false;
    do {
        er = false;
        printf("\nEnter size\n");
        gets(size);  
        for (int i = 0; i < strlen(size); i++) {
            if (size[i] >= '0' && size[i] <= '9') {
            } else {
                printf("\nwrong size\n");
                er = true;
                break;
            }
        }
 
      if (er == false) {
        if (atoi(size) < 21 && atoi(size) > 0) {
        } else {
            printf("\nwrong size\n");
            er = true;
          }
      }
    } while (er == true);
  int temp = atoi(size);
    delete size;//с этой строкой прога зависает или же вылетает; если убрать эту строку, то прога работает,но конечно c detected memory leaks;
    }
    return temp;
}
ПОМОГИТЕ ПОЖАЛУЙСТА!!!!! НА ЗАВТРА НАДО!!!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2010, 20:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выделение и удаление памяти, выделенной для динамической строки (C++):

Выделение динамической памяти для матрицы - C++
Эта программа преобразует матрицу со случайными числами в матрицу, которая показана на рисунке ниже. Ее нужно переделать так, чтобы...

Выделение динамической памяти для char[n]* - C++
Есть количество цитат (quote), которые должны быть типа char* Есть переменная с колличеством цитат (quoteNum) Вопрос: как выделить...

Выделение динамической памяти для char - C++
Здравствуйте, возник вопрос: как выделить память для char массива? Вот, что делаю я: #include &quot;stdafx.h&quot; #include&lt;iostream&gt; ...

Выделение динамической памяти для матрицы - C++
Здравствуйте! Подскажите, пожалуйста, что делаю не так..написала программу, которая считывает двумерный массив...с помощью операторов...

Выделение динамической памяти для массива точек - C++
Доброго времени суток. Вот у нас есть структура точка struct point { double x,y; } p;

Выделение динамической памяти для двумерного массива. - C++
#include &lt;iostream&gt; int main() { setlocale( LC_ALL,&quot;Russian&quot; ); int N, M; std::cout &lt;&lt; &quot;Введите кол-во строк в массиве:...

8
SerЁga
32 / 32 / 4
Регистрация: 18.08.2009
Сообщений: 93
11.03.2010, 21:07 #2
Попробуй сделать так
C
1
delete [] size;
1
Aye Aye
368 / 282 / 36
Регистрация: 17.12.2009
Сообщений: 567
11.03.2010, 21:08 #3
delete [] size; ты же массив удаляешь. стыдно должно быть. ))))) ну вот я опоздал
1
Suslik73
2 / 2 / 1
Регистрация: 11.10.2009
Сообщений: 52
11.03.2010, 21:09  [ТС] #4
эх... пробовал уже... все-равно вылетает или зависает
0
Sergey_O
5 / 5 / 1
Регистрация: 09.12.2009
Сообщений: 65
11.03.2010, 21:13 #5
delete(size), не?
1
Suslik73
2 / 2 / 1
Регистрация: 11.10.2009
Сообщений: 52
11.03.2010, 21:23  [ТС] #6
Цитата Сообщение от Sergey_O Посмотреть сообщение
delete(size), не?
нет вроде

Добавлено через 45 секунд
Цитата Сообщение от Aye Aye Посмотреть сообщение
delete [] size; ты же массив удаляешь. стыдно должно быть. ))))) ну вот я опоздал
Цитата Сообщение от SerЁga Посмотреть сообщение
Попробуй сделать так
C
1
delete [] size;
кстати пишет вот что:

ОС Windows инициировала точку останова в kontrol_vvod.exe.

Это может быть вызвано повреждением кучи и указывает на ошибку в kontrol_vvod.exe или в одной из загруженных им DLL.

Возможной причиной так же может быть нажатие пользователем клавиши F12, когда фокус принадлежит kontrol_vvod.exe

Выведенное на экран окно содержит дополнительные данные для диагностики ошибки

Добавлено через 5 минут
эх...ну может кто знает в чем дело?
0
and
20 / 20 / 1
Регистрация: 12.05.2009
Сообщений: 43
11.03.2010, 22:27 #7
Это похоже на космос (так что не сердитесь и не ржите)
Но попробуй написать delete [] size сразу после char *size = new char[];

Хотя теоретически просто можно выделить char *size = new char[256];
Сомневаюсь что будут вводить уж оченьмногобукафф....
0
easybudda
Модератор
Эксперт CЭксперт С++
9693 / 5643 / 962
Регистрация: 25.07.2009
Сообщений: 10,847
11.03.2010, 23:49 #8
Цитата Сообщение от Suslik73 Посмотреть сообщение
char *size = new char[];
Вторая же строка в программе - оператор new [] требует количество элементов. Так нельзя делать!
Да и вообще странная затея. Чем Вам класс string не угодил?
0
Sergey_O
5 / 5 / 1
Регистрация: 09.12.2009
Сообщений: 65
12.03.2010, 06:49 #9
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdio.h>
#include <iostream>
#include <string.h>
 
using namespace std;
 
int getSize()
{
        char *size = new char[256];
        bool er = false;
    do {
                er = false;
                printf("\nEnter size\n");
                gets(size);  
                for (int i = 0; i < strlen(size); i++) 
                {
                        if (size[i] >= '0' && size[i] <= '9') {  } 
        else 
                {
                                printf("\nwrong size\n");
                                er = true;
                                break;
                        }
                }
 
      if (er == false) 
      {
        if (atoi(size) < 21 && atoi(size) > 0) 
        {
                
        } else 
        {
                printf("\nwrong size\n");
                er = true;
              
        }
      }
    } while (er == true);
  int temp = atoi(size);
        delete size;
  
 
return temp;
}
из-за ваших скобок очень тяжело читать программу. при чем 1 лишняя.
0
12.03.2010, 06:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2010, 06:49
Привет! Вот еще темы с ответами:

Выделение динамической памяти для чтения каждой структуры из файла - C++
Здравствуйте! Никак не получается выделить динамическую память под каждую структуру из файла, учитывая, что я не знаю сколько структур в...

Как добавить новой динамической памяти к уже выделенной - C++
Добрый вечер! У меня есть следующий вопрос: Допустим я выделил для некоторой строки память char *p; p = new char ; Поработал...

Как можно узнать размер выделенной динамической памяти, на которую ссылается указатель a? - C++
Скажем я в какой-то момент выделяю память под массив: int *a = new int ; затем память может изменяться как-то и конечный размер мне не...

Выделение динамической памяти - C++
Доброго времени суток! я начинающий программист, столкнулась с такой проблемой: выделяю память под динамический массив, например ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru