У меня есть небольшая проблема с std::sort
.std :: sort с ошибкой сегментации личного класса
Когда я пытаюсь сортировать выделенный массив объектов, используя переопределение функции «<» с std::sort
, я получаю ошибку сегментации.
Вы можете увидеть проблему здесь ниже в примере игрушек: В моих class point
, я выделяю массив личных вещей key
(особенно выделяю память для массива v
). Его элементы инициализируются, а затем я пытаюсь отсортировать этот массив.
С небольшими размерами (для массива v
и массив для сортировки), я не получаю ошибки, а valgrind не возвращает никаких. Для больших размеров я получаю ошибку сегментации, а valgrind выводит много ошибок, которые я не понимаю.
Не могли бы вы мне помочь?
Спасибо!
using namespace std;
#include <stdlib.h>
#include <iostream>
#include <algorithm>
class key
{
public :
int size;
double *v, f;
key() {}
key(const key & k)
{
size = k.size;
f = k.f;
v = (double*)malloc(size*sizeof(double));
for(int i=0;i<size;i++)
v[i]=k.v[i];
}
~key()
{
free(v);
}
bool operator<(const key& other) const
{
return f<other.f;
}
void init(int s)
{
size = s;
v = (double*)malloc(size*sizeof(double));
for(int i=0;i<size;i++)
v[i]=((double)rand()/(RAND_MAX));
}
};
class point
{
public :
key *k;
point() {}
point(int param1, int param2)
{
k = (key*)malloc(param1*sizeof(key));
for(int i=0;i<param1;i++)
{
k[i].init(param2);
k[i].f=param1-i;
}
std::sort(k,k+param1);
free(k);
}
};
int main(int argc, char **argv)
{
point p(100,21200); // segmentation fault!
//point p(10,2); // no segmentation fault!
return 0;
}
Почему вы используете 'malloc'? Почему бы не использовать 'std :: vector'? Только это одно изменение, вероятно, устранит проблему. Прямо сейчас, ваши классы не безопасно скопируются из-за отсутствия оператора копирования/присваивания для обработки этого 'double *' члена. Избавиться от него и заменить его на 'std :: vector' автоматически исправляет все эти проблемы. –
PaulMcKenzie
Это еще хуже. есть 'malloc' для массива' key ', который не является POD. Это не закончится хорошо. –
Каковы ошибки, которые вы не понимаете в выводах valgrind? – immibis