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

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

Войти
Регистрация
Восстановить пароль
 
shau-kote
3 / 3 / 0
Регистрация: 24.06.2012
Сообщений: 50
#1

Ошибка в функции, связанная с использованием памяти - C++

20.03.2013, 02:11. Просмотров 512. Ответов 1
Метки нет (Все метки)

Все доброго времени суток.

Помогите, пожалуйста, найти ошибку в моей функции:
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
#include <wchar.h>
#include "functions.h" // файл с прототипами функций
 
wchar_t* cleanwchar_t out[], const wchar_t in[])
{
    int n = wcslen(in);
    wchar_t *str = new wchar_t[n];
    wcscpy(str, in);
 
    out[0] = L'\0';
    wchar_t *state;
 
    wchar_t *word = wcstok(str, L" ", &state);
 
    while (NULL != word) {
        if (wcslen(word) > 1) {
            wcscat(out, word);
            wcscat(out, L" ");
        }
        word = wcstok(NULL, L" ", &state);
    }
 
    delete state;
    delete[] str;
    return out;
}
Функция выделяет из исходной строки слова и записывает их в итоговую, игнорируя слова длиной в одну букву.

Бьюсь уже несколько дней, но никак не могу понять, почему попытка использовать функцию программу вызывает вот такую ошибку:
Код
*** Error in `./a.out': free(): invalid next size (fast): 0x08610338 ***
a.out: malloc.c:2369: sysmalloc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed.
Аварийный останов (core dumped)
Как я понял, проблема связана с освобождением памяти.
Я также выяснил, что она возникает после цикла, т.е. уже на последних строках. Причём возникает она не всегда, иногда функция корректно отрабатывает. А иногда не возвращает ничего, хотя и не вызывает ошибки.

Ткните, пожалуйста, носом, где я не прав. :\
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2013, 02:11     Ошибка в функции, связанная с использованием памяти
Посмотрите здесь:

Ошибка, связанная с массивами C++
Работа с массивами с использованием выделения динамической памяти C++
Выделение памяти с использованием malloc C++
Ошибка связанная с string C++
C++ Ошибка, связанная с переполнением буфера
Написать программу с использованием функции и с использованием макроса C++
Редкая ошибка, связанная с переполнением стека C++
C++ Ошибка при создании функции с использованием Args&
C++ чтение памяти с использованием указателей
Ошибки с использованием памяти C++
Ошибка связанная с Динамическим массивом C++
Ошибка, связанная со статическим членом класса C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
anmartex
...
1701 / 1194 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
20.03.2013, 08:40     Ошибка в функции, связанная с использованием памяти #2
shau-kote, я конечно до конца не стал разбираться в вашем коде, но ошибку видно на лицо и вы её озвучили.
Обратите внимание на строку 12 своего кода. Здесь вы просто-напросто объявляете указатель (без выделения памяти). А вот в строчке 24 вы начинаете освобождать из под него память. Да и зачем вас вообще state если вы его не используете. И насколько я осведомлён, функция wcstok (или тут) принимает всего 2 параметра, а не 3.
Yandex
Объявления
20.03.2013, 08:40     Ошибка в функции, связанная с использованием памяти
Ответ Создать тему
Опции темы

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