void MulStr(char*&,char*&,char*&);
void main()
{
char *a = "123";
char *b = "89";
char *res = new char[strlen(a) + strlen(b)];
if(res == NULL)
cout << "Error" << endl;
MulStr(a,b,res);
delete res; // <- прога вылетает здесь при дебаге
}
void MulStr(char *&a,char *&b,char *&res)
{
res = "142";
}
ошибка уничтожения объекта при дебаге
в программе передаю строки по ссылке в функцию для экономии памяти, и работаю дальше с строками объявленными в мейне, при изменении строки в функции и попытке освободить память в мейне при дебаге вылетает. Если кто знает в чем причина поделитесь знаниями, заранее спасибо.
во-вторых, следует писать delete[] res.
Цитата: stimpi
в программе передаю строки по ссылке в функцию для экономии памяти,
Это как же?
Цитата: stimpi
и работаю дальше с строками объявленными в мейне, при изменении строки в функции
ты меняешь не данные строки, а указатель на ее первый элемент.
Цитата: stimpi
и попытке освободить память в мейне при дебаге вылетает.
Вылетит и так, а память статическая (const)
Код:
strcpy(res,[COLOR=seagreen]"142"[/COLOR]);
имхо, пожалуй, тебе лучше использовать std::string
[COLOR=gray]ЗЫ: в данном случае delete vs delete[] не смертельно.......[/COLOR]
Цитата:
void MulStr(char *&a,char *&b,char *&res)
Дело в том, что char* - это не строка. Это всего лишь указатель на массив символов. Сам массив может находиться где угодно, поэтому в функцию передавать нужно именно указатель, а не ссылку на указатель.
Далее, использование символьных массивов в качестве строк, это одна из самых опасных операций в С++. Поэтому все компиляторы имеют один либо несколько классов, которые реализуют внутри себя все рутинные операции без какого-либо видимого уменьшения скорости работы программы.
А использование символьных массивов в учебных примерах только [bухудшит восприятие принципов С++
разобрался, спасибо.