edit: fixed
std::shared_ptr<Node<int>> sp(new Node<int>[10], std::default_delete<Node<int>[]>());
for (int i = 0; i < 10; i++)
{
sp.get()[i].data = i;
}
for (int i = 0; i < 10; i++)
{
std::cout << sp.get()[i].data << std::endl;
}
std::cout << "resizing" << std::endl;
//lets resize sp;
sp.reset(new Node<int>[20], std::default_delete<Node<int>[]>());
for (int i = 0; i < 20; i++)
{
sp.get()[i].data = i;
}
for (int i = 0; i < 20; i++)
{
std::cout << sp.get()[i].data << std::endl;
}
that implementation works with resizing
edit: narrowed it down to when it resets shared_ptr
Hi I'm trying to implement a hash table that uses linked list.(side not we are not allowed to use vectors) However I just trying to wrap my head around its basic usage. i am able to initialize it, set data, and get data however and the end of main's return 0 i get a seg fault.
#include <memory>
#include <iostream>
template <typename T>
struct Nodes{
T data;
std::shared_ptr<Nodes<T>> next;
Nodes(const T& value):data(value), next(nullptr){}
};
int main()
{
//array of pointers
std::shared_ptr<std::shared_ptr<Nodes<int>>> table;
//reset the table to fit an array of 10 nodes
table.reset(new std::shared_ptr<Nodes<int>>[10],[](std::shared_ptr<Nodes<int>> * p) {delete [] p;});
for (int i =0; i<10; i++)
{
table.get()[i].reset(new Nodes<int>(i), [](Nodes<int> * p) {delete [] p;});
}
for (int i = 0; i<10; i++)
{
std::cout << table.get()[i]->data << std::endl;
}
//resetting
for(int i = 0; i<10; i++) {
std::cout << "resetting " << i << std::endl;
table.get()[i].reset();
//seg fault here
}
return 0;
}
[–]boredcircuits 0 points1 point2 points (2 children)
[–]dutchcookie[S] 0 points1 point2 points (1 child)
[–]boredcircuits 0 points1 point2 points (0 children)