На данный вопрос уже ответили:
Есть связной список , во время когда удаляется из списка один узел, по идее его надо удалить , поскольку он был создан через new. Я использую оператор delete ,но после этого оператора выводится все так же адрес указателя. Почему???
class LinkedList{
private:
class Node{
public:
int a;
Node* next;
~Node(){
delete next;
}
};
Node* head;
int lenght;
public:
LinkedList(){
lenght=0;
head=nullptr;
}
void add(int x) {
Node* current = new Node;
current->a = x;
current->next = nullptr;
if(head==NULL){
head=current;
}else{
Node *node=head;
while(node->next!=NULL){
node=node->next;
}
node->next=current;
}
lenght++;
}
void remove(int index){
Node *temp=head;
int count=0;
while(count<index-1){
temp=temp->next;
count++;
}
Node *rem=temp->next;
Node *next=rem->next;
temp->next=next;
lenght--;
delete rem;
cout<<rem<<endl;
}
bool isEmpty(){
return lenght==0;
}
int get(const int index){
Node *temp=head;
int i=0;
while(i<index){
temp=temp->next;
i++;
}
return temp->a;
}
int *toArray(){
int arr[lenght];
Node *temp=head;
for(int i=0;i<lenght;i++){
arr[i]=temp->a;
temp=temp->next;
}
return arr;
}
int size(){
return lenght;
}
};
int main(){
setlocale(LC_ALL,"rus");
LinkedList obj;
obj.add(1);
obj.add(2);
obj.add(3);
obj.add(4);
obj.add(5);
obj.remove(2);
for(int i=0;i<obj.size();i++)
cout<<obj.get(i)<<endl;
return 0;
}
оператор delete rem;
освобождает память, выделенной для обьекта, на который указывает rem
. Но в rem
, как и раньше, записан этот адрес, только с той разницей, что этот адрес может использоваться для других обьектов. Так как этот указатель создан в функции, он уничтожается сам после выхода из функции, и его значение вы не возвращаете из функции, поэтому несанкцианированный доступ к освобожденной части памяти(уничтоженного обьекта) вы не сможете иметь. Если есть ситуация, что вы где то должны хранить этот указатель, то его перед хранением нужно обнулять, т.е. присвоить ноль(nullptr)
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Собственно, есть у меня один FXML, к которому я, в зависимости от ситуации, хочу применять один из двух контроллеров, так что вариант с указанием...
Исключение указывает на эту строку StringuserJsonStroke=getJsonFromServer(Stringformat("%s/%d", urlPath), 0);
В Java потоки ввода-вывода InputStream и OutputStream представляют собой концепцию работы с внешним миром, будь то файл на диске, экран монитора, сетевое...
Начал разбираться с JavaFx и появился вопросВозможно ли сделать так, что при нажатии на элементы TreeView появлялся текст, который привязан к этому...