С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
dlis
0 / 0 / 0
Регистрация: 21.01.2012
Сообщений: 12
1

delete динамического массива символов

10.02.2012, 10:21. Просмотров 1706. Ответов 8
Метки нет (Все метки)

Простой код вываливается с ошибкой???

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream.h>
#include <string.h>
int main()
{  
    char * str;
    str = new char[11];
 
    str = "1234567890";
 
    char * surce = new char[11];
    strcpy(surce, str);
 
    delete [] str;   // вываливается с ошибкой !!!!
 
    return 0
}
в чём причина такого результата??
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2012, 10:21
Ответы с готовыми решениями:

Ошибка delete [] динамического массива
Здравствуйте! Задача - считать числа из файла, не зная их количества. Для...

Правильное удаление двумерного динамического массива ( нужен ли delete[] array )
В одном из постов форума Увидев код одного из участников форума: Я пришел...

Удаление двумерного динамического массива символов
Программа разбивает строку на слова и записывает каждое слово по отдельности в...

Возникает ошибка при удалении динамического массива символов в деструкторе класса
Всем привет. Есть приватная переменная, указатель на строку wchar_t...

Операторы динамического выделения памяти - new/delete
Здравствуйте. Я немного не понимаю некоторый момент, связанный с...

8
Bers
Заблокирован
10.02.2012, 10:25 2
Цитата Сообщение от dlis Посмотреть сообщение
в чём причина такого результата??
Сначала перенаправил указатель на константную область памяти. Потом решил потереть то, что является нерушимым и незыблемым.
0
dlis
0 / 0 / 0
Регистрация: 21.01.2012
Сообщений: 12
10.02.2012, 10:37  [ТС] 3
так ведь strcpy() копирует содержимое строки

Добавлено через 6 минут
Цитата Сообщение от Bers Посмотреть сообщение
Сначала перенаправил указатель на константную область памяти. Потом решил потереть то, что является нерушимым и незыблемым.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main()
{  
    char * str;
    str = new char[11];
    
    str = "1234567890";
 
    char * surce = new char[11];
 
    //strcpy(surce, str);
 
    for(int i=0; i<=strlen(str); surce[i++]=str[i]);
 
    delete [] str; // такое тоже вываливается!!!!
    return 0;
}
0
Bers
Заблокирован
10.02.2012, 10:38 4
Цитата Сообщение от dlis Посмотреть сообщение
так ведь strcpy() копирует содержимое строки
C++
1
2
3
4
5
        char * str;
        str = new char[11];  //вот здесь указатель смотрит на выделенный кусок памяти
 
        str = "1234567890"; //вот здесь он уже смотрит на другую область памяти. 
                                   //На константный массив чаров
Таким образом, адрес куска памяти, на который указатель смотрел изначально - утерян. Утечка памяти.
Сам же указатель теперь смотрит на начало константного массива.
C++
1
2
3
        char * surce = new char[11];
        strcpy(surce, str); //Здесь ты копируешь в область памяти на которую смотрит surce 
                                  //содержимое этого константного массива
C++
1
delete [] str;   // вываливается с ошибкой !!!!
А здесь ты пытаешь удалить память, на которую смотрит указатель str
А поскольку, он у тебя смотрит на константный массив, то удалить его он никак не может.
Итого: утечка памяти, + ошибка.
1
dlis
0 / 0 / 0
Регистрация: 21.01.2012
Сообщений: 12
10.02.2012, 10:43  [ТС] 5
благодарю за уяснение))
Код
char * str;
	str = new char[11];
	
	strcpy(str, "1234567890");

	char * surce = new char[11];
	strcpy(surce, str);

	bool fl = str == surce;


	//for(int i=0; i<=strlen(str); surce[i++]=str[i]);

	delete [] str;
	return 0;
такое работает без проблем)
0
Annushkash
0 / 0 / 1
Регистрация: 15.12.2015
Сообщений: 19
18.12.2015, 08:38 6
Здравствуйте! Пытаюсь реализовать шифрование RSA и у меня похожая проблема:
C++
1
2
3
4
5
6
unsigned char *Text = new unsigned char[length]; //создаю
Text = SystemStringToChar(txt); //присваиваю значение
                                             //unsigned char* SystemStringToChar(String^ string) {}
unsigned int *cryptoCode = new unsigned int[length];
cryptoCode = serial->Crypt(Text, length); //передаю в метод
delete [] Text;//при попытке удаления - ошибка
В чем проблема?
0
Lensato
49 / 49 / 31
Регистрация: 07.10.2015
Сообщений: 170
18.12.2015, 09:20 7
Цитата Сообщение от Annushkash Посмотреть сообщение
у меня похожая проблема
Да, проблема та же.
Цитата Сообщение от Annushkash Посмотреть сообщение
В чем проблема?
Описано выше.
SystemStringToChar(txt) скорее всего возвращает указатель на константу.
0
Annushkash
0 / 0 / 1
Регистрация: 15.12.2015
Сообщений: 19
18.12.2015, 19:04 8
Цитата Сообщение от Lensato Посмотреть сообщение
SystemStringToChar(txt) скорее всего возвращает указатель на константу.
Я написала в комментариях к коду сигнатуру этого метода. Вот его код:
C++
1
2
3
4
unsigned char* SystemStringToChar(String^ string)
{
    return (unsigned char*)(void*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(string);
}
Возвращается указатель на массив char*, если я все правильно понимаю. Или я неправа?
0
Skampf
Заблокирован
18.12.2015, 19:09 9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[]){
 
    setlocale(LC_ALL, "Russian");
    
    char * str = new char[11];
 
    gets_s(str,10);
 
    char * surce = new char[11];
    strcpy_s(surce,11, str);
 
 
    delete[] str;
 
    system("pause");    
        return 0;
}
В чем собственно проблема?
0
18.12.2015, 19:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2015, 19:09

Реализовать функцию Delete(s, i, n), возвращающую строку, полученную удалением из строки s n символов
Реализовать функцию Delete(s, i, n), возвращающую строку, полученную удалением...

Используя delete по указателю, возвращенному new [] или delete [] указателем, возвращаемым new
Помогите ответить на вопрос, не могу понять суть вопроса (правильно ли понимаю,...

Функция с применением динамического массива, чтобы размер массива увеличивался по мере необходимости
Ребята, подскажите, кто может, каким образом создать функцию с применением...


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

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

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