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

что же на самом деле делает strcpy? - C++

Восстановить пароль Регистрация
 
Firework
57 / 81 / 21
Регистрация: 01.04.2013
Сообщений: 567
28.09.2013, 22:30     что же на самом деле делает strcpy? #1
вот такой пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
using namespace std;
 
int main ()
{
    string buff;
    buff += "what a hell?";
    char* cbuf = new char[buff.size()];
    strcpy(cbuf, buff.c_str());
    delete[] cbuf;  // ...
    return 0;
}
выходит

ОС Windows инициировала точку останова в task2.exe.

Это может быть вызвано повреждением кучи и указывает на ошибку в task2.exe или в одной из загруженных им DLL.

Возможной причиной так же может быть нажатие пользователем клавиши F12, когда фокус принадлежит task2.exe

Выведенное на экран окно содержит дополнительные данные для диагностики ошибки
как так?
Если убрать delete[] cbuf; то ошибки не будет. Но наверно будет утечка памяти. Как её избежать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2013, 22:30     что же на самом деле делает strcpy?
Посмотрите здесь:

C++ ошибки которых на самом деле нет
C++ На самом деле #define'а нету.
Что такое ссылка на самом деле? C++
C++ Что это за метод?И что он делает?
Число double 0.1 на самом деле не 0.1 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
28.09.2013, 22:33     что же на самом деле делает strcpy? #2
нет места на завершающий 0
Issues
429 / 364 / 37
Регистрация: 06.08.2012
Сообщений: 961
28.09.2013, 22:37     что же на самом деле делает strcpy? #3
C++
1
char* cbuf = new char[buff.size()+1];
Firework
57 / 81 / 21
Регистрация: 01.04.2013
Сообщений: 567
28.09.2013, 22:38  [ТС]     что же на самом деле делает strcpy? #4
да точно, но ведь всё равно должен удалять корректно выделенную память
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
28.09.2013, 22:44     что же на самом деле делает strcpy? #5
нет, если вышел за границы выделенной памяти, при освобождении будет ошибка... а может и не только при освобождении.
zer0mail
2187 / 1870 / 187
Регистрация: 03.07.2012
Сообщений: 6,650
Записей в блоге: 1
28.09.2013, 22:45     что же на самом деле делает strcpy? #6
Должен-то должен, но strcpy портит служебную информацию о выделенной памяти.
Firework
57 / 81 / 21
Регистрация: 01.04.2013
Сообщений: 567
28.09.2013, 23:20  [ТС]     что же на самом деле делает strcpy? #7
а по-подробнее?
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
28.09.2013, 23:36     что же на самом деле делает strcpy? #8
Что может быть подробнее? Выделил size() штук байт - не смей использовать ни байта больше
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2013, 23:37     что же на самом деле делает strcpy?
Еще ссылки по теме:

Что делает функция strcpy(t, f) C++
C++ Передача массива в функцию - что на самом деле предается?
C++ Что такое string на самом деле?

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

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4844 / 2983 / 367
Регистрация: 10.11.2010
Сообщений: 11,021
Записей в блоге: 10
Завершенные тесты: 1
28.09.2013, 23:37     что же на самом деле делает strcpy? #9
Цитата Сообщение от Firework Посмотреть сообщение
а по-подробнее?
Нулевой символ, копируемый функцией strcpy может затирать информацию о выделенном участке памяти, и при освобождении памяти, оператор delete использует неверную информацию в следствии чего происходит неопределенное поведение программы, в данном случае:
Цитата Сообщение от Firework Посмотреть сообщение
ОС Windows инициировала точку останова в task2.exe.
Это может быть вызвано повреждением кучи и указывает на ошибку в task2.exe или в одной из загруженных им DLL.
Возможной причиной так же может быть нажатие пользователем клавиши F12, когда фокус принадлежит task2.exe
Выведенное на экран окно содержит дополнительные данные для диагностики ошибки
Yandex
Объявления
28.09.2013, 23:37     что же на самом деле делает strcpy?
Ответ Создать тему
Опции темы

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