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

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

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

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

20.03.2013, 02:11. Просмотров 556. Ответов 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)
Как я понял, проблема связана с освобождением памяти.
Я также выяснил, что она возникает после цикла, т.е. уже на последних строках. Причём возникает она не всегда, иногда функция корректно отрабатывает. А иногда не возвращает ничего, хотя и не вызывает ошибки.

Ткните, пожалуйста, носом, где я не прав. :\
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2013, 02:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка в функции, связанная с использованием памяти (C++):

Ошибка, связанная с массивами - C++
Вот такой код для такой задачи: записать в массиве М количество положительных элементов каждого столбца матрицы A(K,L). #include...

Ошибка связанная с string - C++
Не выполняется условие,хотя указываю всё верно.Возможно из-за того,что в условие идёт равно ==,а не при =,но при = мне пишут ошибку...

Ошибка связанная с Динамическим массивом - C++
#include &lt;iostream&gt; #include &lt;cstring&gt; int main() { using namespace std; char * ch = new char; cin &gt;&gt; ch; for (int i = 1; i...

Ошибка, связанная с переполнением буфера - C++
В общем, данный код рабочий, собираю на VS2013, при компиляции выдает переполнение буфера. Другие люди пробовали собирать у себя, у них всё...

Ошибка при создании функции с использованием Args& - C++
При создании Wrapper возникает ошибка. Вроде до этого делал точно так-же и все работало. Чувствует мое сердце где-то я сделал что-то не...

Редкая ошибка, связанная с переполнением стека - C++
Значит ситуация такая, вот весь код он полностью рабочий, но для перегрузки потокового ввода вылетает и пишет, что стек переполнен. Сколько...

1
anmartex
...
1708 / 1201 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
20.03.2013, 08:40 #2
shau-kote, я конечно до конца не стал разбираться в вашем коде, но ошибку видно на лицо и вы её озвучили.
Обратите внимание на строку 12 своего кода. Здесь вы просто-напросто объявляете указатель (без выделения памяти). А вот в строчке 24 вы начинаете освобождать из под него память. Да и зачем вас вообще state если вы его не используете. И насколько я осведомлён, функция wcstok (или тут) принимает всего 2 параметра, а не 3.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2013, 08:40
Привет! Вот еще темы с ответами:

Ошибка, связанная со статическим членом класса - C++
Есть код: class Foo{ public: static void f(); int a; }; void Foo::f(){ std::cin &gt;&gt; a; }

Написать программу с использованием функции и с использованием макроса - C++
Составить две программы вычисления функции F и сравнить результаты ***** - Используя объявления макроса; ***** - Используя обращение к...

Ошибки с использованием памяти - C++
Помогите найти ошибки. Нам дано вектор coords формата (x1, y1, x2, y2,...). Нужно найти длину между точками, определить наибольшую длину и...

Выделение памяти с использованием malloc - C++
Доброго времени суток :) В общем есть следующий класс: class Addres { char name; char street; char city; char state; ...


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

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

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