Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2012, 05:19   #1
MayhemWithMercy
Пользователь
 
Регистрация: 17.08.2012
Сообщений: 23
По умолчанию Функция возвращает массив C++

Я знаю в чем проблема, но не знаю как решить помогите плиз, кстати судя по всему в некоторых компиляторах такой код будет работать.
Код:
#include <iostream>
#include <fstream>

#include "list.h"
#include "list.cpp"

using namespace std;

float *measure(list L);

int main() {  
  list A("text.txt", 500);  
  list B("text.txt", 1000);
  list C("text.txt", 1500);
  
  float *a=measure(A);  //передача по адресу, то есть по сути, в measure деструктор
  float *b=measure(B);  //потушит этот массив a (который созд. в measure)
  float *c=measure(C);  //и я не пойму что тогда лежит в этих 3х массивах

  cout << "\nDone.\n";
  return 0;
}

float *measure(list L) {
  float *a(new float[3]);
  
  a[0]=clock();
  L.insertion_sort("ASCII_code");
  L.insertion_sort("index");
  a[0]=(clock()-a[0])/CLOCKS_PER_SEC;
  
  a[1]=clock();
  L.bubble_sort("ASCII_code");
  L.bubble_sort("index");
  a[1]=(clock()-a[1])/CLOCKS_PER_SEC;
  
  a[2]=clock();
  L.selection_sort("ASCII_code");
  L.selection_sort("index");
  a[2]=(clock()-a[2])/CLOCKS_PER_SEC;
  
  return a;
}
Функция measure измеряет время работы сортировок, и создает массив из трех элементов, вот мне нужно вернуть этот массив, но у меня проблема с деструкторами...
Вот у меня просто linux, код работает этот, но в конце, консоль выдает ошибку SEGMENTATION FAULT
я знаю что это связано с указателями, памятью или деструктором, кароче скажите пжлста как нормально вернуть массив из функции measure, массив (a)!

Я уже как только не пробовал, никак не выходит..

Вот на всякий случай что выводит при
Код:
float *a=measure(A);
  
  for(int i=0; i<3; ++i)
	cout << a[i] << endl;
Код:
user@ax51l:~/Desktop/Source$ g++ main.cpp -o main
user@ax51l:~/Desktop/Source$ ./main
0.07
0
0.14

Done.
Segmentation fault
user@ax51l:~/Desktop/Source$

Последний раз редактировалось MayhemWithMercy; 31.10.2012 в 05:56.
MayhemWithMercy вне форума Ответить с цитированием
Старый 31.10.2012, 07:33   #2
MayhemWithMercy
Пользователь
 
Регистрация: 17.08.2012
Сообщений: 23
По умолчанию

Судя по всему ошибка была не в массивах, я делал 100500 раз, разными способами, и у меня появилось смутное сомнение что дело в чемто другом, оказалось при передаче класса list как форм. параметра в measure, происходит "не знаю что", и выполнение модуля приводит к ошибке...
Все я понял, правда уже нет сил все это объяснять...
Код:
#include <iostream>
#include <fstream>

#include "list.h"
#include "list.cpp"

using namespace std;

void measure(list &L, float *a);

int main() {  
  list A("text.txt", 500);  
  list B("text.txt", 1000);
  list C("text.txt", 1500);
  
  float a[3]; measure(A, a);
  float b[3]; measure(B, b);
  float c[3]; measure(C, c);
  
  for(int i=0; i<3; ++i)
	cout << a[i] << endl;
    
  for(int i=0; i<3; ++i)
	cout << b[i] << endl;
  
  for(int i=0; i<3; ++i)
	cout << c[i] << endl;
  
  cout << "\nDone.\n";
  return 0;
}

void measure(list &L, float *a) {  
  a[0]=clock();
  L.insertion_sort("ASCII_code");
  L.insertion_sort("index");
  a[0]=(clock()-a[0])/CLOCKS_PER_SEC;
  
  a[1]=clock();
  L.bubble_sort("ASCII_code");
  L.bubble_sort("index");
  a[1]=(clock()-a[1])/CLOCKS_PER_SEC;
  
  a[2]=clock();
  L.selection_sort("ASCII_code");
  L.selection_sort("index");
  a[2]=(clock()-a[2])/CLOCKS_PER_SEC;
}
Вот примерно так пока, главное что работает...
Я видимо не очень хорошо знаком с классами, но вероятно нельзя (или это както неправильно происходит) если передавать класс в параметр без ссылки(то есть это будет копирование), но я сделал через ссылку, потом разберусь, щас работает и отлично...

Последний раз редактировалось MayhemWithMercy; 31.10.2012 в 07:40.
MayhemWithMercy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функция возвращает указатель на массив LiuLiuJons Общие вопросы C/C++ 8 01.03.2012 15:48
Функция не возвращает данные. Abuhamed JavaScript, Ajax 4 26.10.2011 10:33
Функция возвращает массив Рик Общие вопросы Delphi 5 22.03.2011 09:07
Функция которая возвращает динамический массив gagarin0 Помощь студентам 5 19.01.2011 13:48
функция не возвращает нужный мне массив LOST94 Общие вопросы C/C++ 0 01.07.2010 15:33