Страница 2 из 2

Добавлено: 30 ноя 2005, 14:33
shpi0
WinMain, а как можно удалить память внутри функции, ведь потом надо возвратить строку, под которую эта память выделялась.
А насчет статических массивов - это ж прога в универ, там преподы требуют чтоб делали именно так, а сами объяснять ниче не хотят...

Добавлено: 30 ноя 2005, 15:03
WinMain
В остальных функциях у тебя в качестве пареметра передаётся указатель на строку. Вот и в функцию fillrand() передавай его как параметр. А выделение памяти убери из fillrand() и перенеси в функцию main().

Добавлено: 30 ноя 2005, 15:28
shpi0
Попробовал так сделать...

Код: Выделить всё

char *fillrand(int k,char *s_random)
{
 int i;
 for (i=0;i<k;i++)
  s_random[i]=random(25)+97;
 s_random[k] = 0;
 return s_random;
}
И main:

Код: Выделить всё

main()
{
 clrscr();
 randomize();
 int k=1000;
 char *s = new char[k+1];
 char *sorted = new char[k+1];
 unsigned long sum;
 unsigned int runnumb;
 s=fillrand(k,s);
 FILE *f=fopen(filename,"w+");
 if (f==NULL)
 {
  printf("\nCant open file!");
  getche();
  return 0;
 }
 printf("%d %s\n\n%d %s\nReady.\n\n",strlen(s),s,strlen(sorted),sorted);
// fputs(s,f);
// fputs("\n\n",f);
 sorted=shakersort(s);
// fputs(sorted,f);
 fclose(f);
 printf("%d %s\n\n%d %s\nReady.",strlen(s),s,strlen(sorted),sorted);
 delete[] sorted;
 delete s;
 getche();
 return 1;
}
Для sorted надо тоже память выделять? Сам-то массив у меня генерируется, а вот с функцией сортировки shakersort что-то не то... Ее когда вызываю, у меня и s и sorted становятся строками из одного символа (сам алгоритм рабочий).

Добавлено: 30 ноя 2005, 15:41
WinMain
Функция shakersort() возвращает указатель на строку s, поэтому для sorted выделять память не нужно. Да и вообще эта переменная здесь лишняя.

Добавлено: 30 ноя 2005, 16:24
shpi0
У меня в shakersort() что-то неправильно? Она строку просто обрезает до одного символа, еще в первом цикле

Код: Выделить всё

  for (j=r;j>l;j--) 
   if (st[j]<st[j-1]) 
    { 
    buf=st[j]; 
    st[j]=st[j-1]; 
    st[j-1]=buf; 
    } 

Добавлено: 01 дек 2005, 12:01
shpi0
Вопрос снят, тока щас дошло что это из-за того что последний символ 0... ))) Щас буду делать еще куча тупых вопросов появится...