Есть список, являющийся public полем класса. При попытки вызвать деструктор класса или деструктор списка-выдает ошибку ссылаясь на исходник класса list.
Кидал уже деструктор листа в деструктор класса, очищал лист перед вызовом деструктора через clear - все бестолку.
Примечание:
ща код скину
Примечание:
#include <iostream>
#include <string>
#include "windows.h"
#include <list>
#include <conio.h>
using namespace std;
//Имеется структ
struct onestring
{
string name;
int markmath, markphys, markrus;
bool ispay;
};
// И класс со списком из этого структа
class Data
{
private:
int x_position, y_position;
void ClearStr(int x, int y)
{
....
}
void TextColor(bool color, double x, onestring localstring, int arr_x, int arr_y)
{
...
}
public:
list<onestring> lst; //Этот список
Data(int numstr)
{
...
}
//Именно в когда вызываешь деструктор вылетает программа и ошибка
//"Unhandled exception at 0x00a64bac in MyCurse.exe: 0xC0000005: Access violation reading location 0xfeeefeee."
~Data()
{
//lst.~list<onestring>();
}
void ShowData();
void AddDataString();
void ArrowsControl();
void SortData(double column);
};
Примечание:
проблема в том что при вызове деструктора обьекта класса-вызывается и деструктор списка и происходит вылет. А удалять обьект мне необходимо. Как с этим быть?
Примечание:
void CreateNewTableClick()
{
data dt(table.GetString());
... //идёт работа с классом и списком
}
Я нигде не вызываю деструктор. Он по идее автоматически должен вызываться после завершения работы процедуры...
Примечание:
К сожалению я еще не знаком с таким понятием (
Работаю под MS Visual Studio 2010(Ultimate)
Может вам Call Stack нужен? Объясните поподробнее...
Примечание:
> MyCurse.exe!std::list<onestring,std::allocator<onestring> >::clear() Line 1109 + 0xc bytes C++
MyCurse.exe!std::list<onestring,std::allocator<onestring> >::_Tidy() Line 1498 C++
MyCurse.exe!std::list<onestring,std::allocator<onestring> >::~list<onestring,std::allocator<onestring> >() Line 771 C++
MyCurse.exe!Data::~Data() Line 130 + 0x12 bytes C++
MyCurse.exe!CreateNewTableClick() Line 397 + 0xf bytes C++
MyCurse.exe!main() Line 410 C++
MyCurse.exe!__tmainCRTStartup() Line 555 + 0x19 bytes C
MyCurse.exe!mainCRTStartup() Line 371 C
kernel32.dll!76881194()
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]
ntdll.dll!76ebb495()
ntdll.dll!76ebb468()
Примечание:
Autos(напрягают ошибки):
+ _Myhead 0x003245d0 {_Next=0x003245d0 _Prev=0x003245d0 _Myval={...} } std::_List_nod<onestring,std::allocator<onestring> >::_Node *
- _Pnext 0xcccccccc {_Next=??? _Prev=??? _Myval={...} } std::_List_nod<onestring,std::allocator<onestring> >::_Node *
_Next CXX0030: Error: expression cannot be evaluated
_Prev CXX0030: Error: expression cannot be evaluated
- _Myval {name={...} markmath=??? markphys=??? ...} onestring
name {npos=4294967295 } std::basic_string<char,std::char_traits<char>,std::allocator<char> >
markmath CXX0030: Error: expression cannot be evaluated
markphys CXX0030: Error: expression cannot be evaluated
markrus CXX0030: Error: expression cannot be evaluated
ispay CXX0030: Error: expression cannot be evaluated
- _Pnode 0xfeeefeee {_Next=??? _Prev=??? _Myval={...} } std::_List_nod<onestring,std::allocator<onestring> >::_Node *
_Next CXX0030: Error: expression cannot be evaluated
_Prev CXX0030: Error: expression cannot be evaluated
- _Myval {name={...} markmath=??? markphys=??? ...} onestring
name {npos=4294967295 } std::basic_string<char,std::char_traits<char>,std::allocator<char> >
markmath CXX0030: Error: expression cannot be evaluated
markphys CXX0030: Error: expression cannot be evaluated
markrus CXX0030: Error: expression cannot be evaluated
ispay CXX0030: Error: expression cannot be evaluated
this 0x0021f890 [0]() std::list<onestring,std::allocator<onestring> > * const
Примечание:
впринципе не стоит всю эту белиберду вверху смотреть. Я все и сам пойму если кто нибудь напишет мини-код:
Класс
Поле класса- стандартный список любого типа(но лучше если это какой-нить struct)
Метод класса-забить этот список любыми случайными данными
Далее хочется увидеть как создается обьект того класса и его деструкция.
Так будет проще и мне и отвечающим.
Примечание:
Пля я ступил. сори. Деструктор же вызывается для всего класса а не для обьекта. Keres спасибо.