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

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

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

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

11.03.2010, 20:49. Просмотров 2526. Ответов 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;
}
ПОМОГИТЕ ПОЖАЛУЙСТА!!!!! НА ЗАВТРА НАДО!!!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2010, 20:49     Выделение и удаление памяти, выделенной для динамической строки
Посмотрите здесь:

C++ Как можно узнать размер выделенной динамической памяти, на которую ссылается указатель a?
Выделение динамической памяти для двумерного массива. C++
C++ Как добавить новой динамической памяти к уже выделенной
C++ Выделение динамической памяти для матрицы
C++ выделение динамической памяти
C++ Выделение динамической памяти для матрицы
Выделение динамической памяти для char[n]* C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SerЁga
32 / 32 / 4
Регистрация: 18.08.2009
Сообщений: 93
11.03.2010, 21:07     Выделение и удаление памяти, выделенной для динамической строки #2
Попробуй сделать так
C
1
delete [] size;
Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
11.03.2010, 21:08     Выделение и удаление памяти, выделенной для динамической строки #3
delete [] size; ты же массив удаляешь. стыдно должно быть. ))))) ну вот я опоздал
Suslik73
2 / 2 / 1
Регистрация: 11.10.2009
Сообщений: 52
11.03.2010, 21:09  [ТС]     Выделение и удаление памяти, выделенной для динамической строки #4
эх... пробовал уже... все-равно вылетает или зависает
Sergey_O
5 / 5 / 1
Регистрация: 09.12.2009
Сообщений: 65
11.03.2010, 21:13     Выделение и удаление памяти, выделенной для динамической строки #5
delete(size), не?
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 минут
эх...ну может кто знает в чем дело?
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];
Сомневаюсь что будут вводить уж оченьмногобукафф....
easybudda
Эксперт С++
9455 / 5468 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
11.03.2010, 23:49     Выделение и удаление памяти, выделенной для динамической строки #8
Цитата Сообщение от Suslik73 Посмотреть сообщение
char *size = new char[];
Вторая же строка в программе - оператор new [] требует количество элементов. Так нельзя делать!
Да и вообще странная затея. Чем Вам класс string не угодил?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2010, 06:49     Выделение и удаление памяти, выделенной для динамической строки
Еще ссылки по теме:

C++ Выделение динамической памяти
Выделение динамической памяти для char C++
C++ Выделение динамической памяти для чтения каждой структуры из файла
Выделение динамической памяти C++
C++ Выделение динамической памяти для массива точек

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

Или воспользуйтесь поиском по форуму:
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 лишняя.
Yandex
Объявления
12.03.2010, 06:49     Выделение и удаление памяти, выделенной для динамической строки
Ответ Создать тему
Опции темы

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