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

При вызове delete[] _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) - C++

Восстановить пароль Регистрация
 
olexandr_r
0 / 0 / 0
Регистрация: 15.03.2014
Сообщений: 55
04.04.2014, 23:21     При вызове delete[] _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) #1
Функция strtok влияет на массив second, после чего его невозможно удалить, не могу понять чего.
first удаляет без проблем.
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
FILE* inputFile;
    char *filename;
    int count_char=0;
    char symbol;
    char* first=new char [10];
    char* second=new char [10];
        filename=command.arguments[0];
        if(strstr(command.arguments[0], ".txt") != NULL)
        {
                if((inputFile = fopen(filename,"rt")) == NULL)
                {
                    printf("Not Find.\n");
                }
                else
                {
        
                    while (symbol=fgetc(inputFile)!=EOF)
                    {
                        if(symbol!='\n')
                        count_char++;
                    }
                    char *pointer=command.arguments[1];
                    strcpy(first,command.arguments[1]);
                    strcpy(second,command.arguments[1]);
                    
                    if(*pointer!=',')
                    {
                        first=strtok(first,",");
                        second=strtok(NULL,",");
                    }
                    else
                    {
                        first=NULL;
                        second=strtok(second,",");
                    }
                    int first_2=0;
                    int second_2=0;
                    if(first!=NULL && second!=NULL)
                    {
                        first_2=atoi(first);
                        second_2=atoi(second);
                    }
                    else if(first!=NULL && second==NULL)
                    {
                        first_2=atoi(first);
                        second_2=0;
                    }
                    else 
                        if(first==NULL && second!=NULL)
                        {
                            first_2=0;
                            second_2=atoi(second);
                        }
                
                        }
                    }
        else
        {
            printf("File not txt.\n");
        }
    delete []first;
    delete []second;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
05.04.2014, 00:47     При вызове delete[] _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) #2
Подсказка: операторам delete и delete [] должны передаваться указатели, которые были возвращены операторами new и new [] соответсвенно. Сравните значения first и second сразу после new [] с их же значениями перед delete [].
Ну чтоб совсем ясно стало:
Цитата Сообщение от olexandr_r Посмотреть сообщение
C++
1
2
3
4
5
first=strtok(first,",");
second=strtok(NULL,",");
...
first=NULL;
second=strtok(second,",");
olexandr_r
0 / 0 / 0
Регистрация: 15.03.2014
Сообщений: 55
05.04.2014, 10:15  [ТС]     При вызове delete[] _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) #3
Я понял, когда мы удалили первый массив, значение с другого удалилась также. Как это обойти?
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
05.04.2014, 11:13     При вызове delete[] _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) #4
Нет, Вы не поняли. У Вас изменяются указатели first и second. Используйте копии.
C++
1
2
3
4
5
6
7
8
9
10
11
char* first=new char [ 10 ];
char* second=new char [ 10 ];
char *first_copy = first;
char *second_copy = second;
std::cout << static_cast< void * >( first ) << ' ' << static_cast< void * >( first_copy ) << std::endl;
std::cout << static_cast< void * >( second ) << ' ' << static_cast< void * >( second_copy ) << std::endl;
//здесь остальной Ваш код
std::cout << static_cast< void * >( first ) << ' ' << static_cast< void * >( first_copy ) << std::endl;
std::cout << static_cast< void * >( second ) << ' ' << static_cast< void * >( second_copy ) << std::endl;
delete [] first_copy;
delete [] second_copy;
olexandr_r
0 / 0 / 0
Регистрация: 15.03.2014
Сообщений: 55
05.04.2014, 12:50  [ТС]     При вызове delete[] _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) #5
Спасибо работает.
Yandex
Объявления
05.04.2014, 12:50     При вызове delete[] _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
Ответ Создать тему
Опции темы

Текущее время: 19:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru