Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
23 / 23 / 5
Регистрация: 17.09.2008
Сообщений: 130
1

Ошибка при очистке памяти

15.01.2010, 17:28. Показов 1151. Ответов 5
Метки нет (Все метки)

Хотелось бы понять, почему в следующем коде:
C++
1
2
3
4
5
6
7
    char* pPath = "Hello!";
 
    char* bufPath = new char[strlen(pPath)+1];
    strcpy_s(bufPath, strlen(bufPath), pPath);
 
    if(bufPath)
        delete [] bufPath;
При попытке очистить память, занимаемую bufPath, выходит ошибка:

Windows has triggered a breakpoint in consol.exe.

This may be due to a corruption of the heap, which indicates a bug in consol.exe or any of the DLLs it has loaded.

This may also be due to the user pressing F12 while consol.exe has focus.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.01.2010, 17:28
Ответы с готовыми решениями:

Ошибка при освобождении памяти
#include <iostream> using namespace std; int main() { int a=32; int *ptr=&a; delete ptr;

Ошибка при освобождении памяти
Доброго времени суток. При динамическом создании переменной и последующем её удалении возникает...

Ошибка при освобождении памяти
MS Visual 2010 Express OS: Windows Vista Написал следующий код: LPWSTR CurrentLanguage;...

Ошибка при освобождении динамически выделенной памяти
Почему возникает ошибка при выделении памяти под buff при 2-й итерации? #include <stdio.h>...

5
Эксперт С++
2922 / 1271 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
15.01.2010, 18:16 2
C++
1
2
3
4
5
    char* pPath = "Hello!";
 
    char* bufPath = new char[strlen(pPath)+1];
    strcpy(bufPath, pPath);
    delete [] bufPath;
1
Эксперт С++
2253 / 768 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
15.01.2010, 18:32 3
nazavrik, на вскидку, потому,что второй параметр у тебя strlen(bufPath), хотя по логике ожидается strlen(pPath)+1;
1
1259 / 797 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
15.01.2010, 21:00 4
Функций начинающихся с str надо опасаться и вот почему:

C++
1
2
3
4
5
6
7
8
#include <string.h>
 
void main (){
 
const int size=4;
char mas[size];
strcpy(mas,"SuperMaster");         //Выход за буфер при копировании в массив  меньшего размера
}
1
Эксперт С++
2253 / 768 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
15.01.2010, 21:33 5
Genius Ignat, именно для этого используется strcpy_s. подробнее здесь
1
Эксперт С++
2922 / 1271 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
15.01.2010, 22:15 6
С одной только оговоркой: все эти *_s функции не соответствуют Стандарту языка и могут применяться только для разработки приложений в Microsoft Visual C++.
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.01.2010, 22:15

Ошибка при чистке динамически выделенной памяти
Всё выполняется, но при очистке памяти: for (j=0; j&lt;m; j++) delete aa; delete aa; ...

Ошибка сегментации при освобождении памяти
Вот в упор не понимаю, почему программа вылетает уже на завершающем этапе. Пожалуйста, посмотрите,...

Ошибка при очистке памяти
Есть часть когда в программе, должна сложить объекты, в которых находятся строки. Возникает ...

Ошибка при очистке памяти в динамическом массиве
вот имеется такой код. программа, которая вставляет массив в массив. всё работает правильно, но в...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru