Russian Qt Forum

Программирование => С/C++ => Тема начата: RuZ от Май 12, 2009, 19:44



Название: std::sort
Отправлено: RuZ от Май 12, 2009, 19:44
Цель задания вывести все возможные комбинации, которые можно составить из заданных букв.
В Borland C++Builder код работает отлично, а в QT Creator 1.1.0 вылетает с ошибкой (exited with code -1073741819)
вероятнее всего проблемы с выделением памяти.
В чём может быть дело?
Код:
#include <string.h>
#include <algorithm>
#include <conio.h>
#include <iostream.h>
int main(int argc, char* argv[])
{
int i=0;
char* strings=new char[200];
strings="bcdse";
int numStrings=strlen(strings);
std::sort(&strings[0], &strings[numStrings]);
do {
cout<<strings;
cout<<endl;
i++;
  } while ( std::next_permutation (&strings[0], &strings[numStrings])); 
cout<<i;
getch();
return 0;
}


Название: Re: std::sort
Отправлено: Авварон от Май 12, 2009, 19:56
эм
Код:
template<class RandomAccessIterator>
   void sort(
      RandomAccessIterator _First,
      RandomAccessIterator _Last
   );
Я чего-то не понимаю, или нужно передавать итераторы а не указатель на чары?


Название: Re: std::sort
Отправлено: Rcus от Май 12, 2009, 20:47
BCC пропускает это?
GCC сразу ругается на конверсию const char * в char *.
А проблема в непонимании указателей (strings="bcdse"; -> Segmentation fault)


Название: Re: std::sort
Отправлено: RuZ от Май 12, 2009, 20:58
QT Creator, а значит и gcc ни на что не ругается, а просто программа уже потом вылетает с ошибкой.
Можете сказать что нужно сделать, что бы код заработал нормально? Если можно напишите верный алгоритм.


Название: Re: std::sort
Отправлено: Rcus от Май 12, 2009, 21:06
deprecated conversion from string constant to ‘char*’ (gcc 4.3.3)

Проще всего конечно не смешивать C и C++. Если уж пишете с использованием std, то к вашим услугам есть std::string.
А наименьшие изменения, которые заставят код работать это замена strings="bcdse"; на strcpy(strings,"bcdse");


Название: Re: std::sort
Отправлено: RuZ от Май 12, 2009, 21:20
Спасибо, всё работает, какой-то баг в QTCreator.
А какой бы другой способ рашения данной задачи предложили бы вы?


Название: Re: std::sort
Отправлено: sermp от Май 12, 2009, 21:34
если я не ошибаюсь, Вы забыли
Код:
delete [] strings;
в конце

а кто-нибудь может объяснить почему работает
Код:
std::sort(&strings[0], &strings[numStrings]);
т.е. во что преобразуется char?


Название: Re: std::sort
Отправлено: Авварон от Май 12, 2009, 21:53
подумав, решил, что в принципе ни во что не преобразовывается, так как для чара определены ++ и операции сравнения/присваивания - то есть классу, чтобы быть итератором, не нужно специфических полей/методов


Название: Re: std::sort
Отправлено: pastor от Май 13, 2009, 12:02
Спасибо, всё работает, какой-то баг в QTCreator.

QtCreator здесь непричем.