VC++ MFC CStringArray
11 отговора
341 прегледа
VC++ MFC CStringArray
Zdr. imam sledniq kod pr:
...
CStringArray m_strArr
void Test()
{
m_strArr.SetSize(10000,10000)
for (int i=0;i<10000;i++) m_strArr.Add(CString ("TEST");
m_strArr.RemoveAll();
}
...
znachi v Debug pametta se osvobocdava normalno no vrelease ne se osvobovda do zatvarqne na prilozenieto .
...
CStringArray m_strArr
void Test()
{
m_strArr.SetSize(10000,10000)
for (int i=0;i<10000;i++) m_strArr.Add(CString ("TEST");
m_strArr.RemoveAll();
}
...
znachi v Debug pametta se osvobocdava normalno no vrelease ne se osvobovda do zatvarqne na prilozenieto .
Re: VC++ MFC CStringArray
towa e source na RemoveAll:
_AFXCOLL_INLINE void CStringArray::RemoveAll()
{ SetSize(0); }
_AFXCOLL_INLINE void CStringArray::RemoveAll()
{ SetSize(0); }
Re: VC++ MFC CStringArray
Znachi tove stava pri VC6.0 pri VC7.0 veche nqma problem no neznam kak da go fixna za 6.0 .Ochevidno problema e v MFC ot 2 dane se rovq no nisto ne moga da namerq
Re: VC++ MFC CStringArray
const CObject** GetData( ) const;
CObject** GetData( );
Return Value
A pointer to the array of CObject pointers.
Remarks
Use this member function to gain direct access to the elements in the array. If no elements are available, GetData returns a null value.
While direct access to the elements of an array can help you work more quickly, use caution when calling GetData; any errors you make directly affect the elements of your array.
The following table shows other member functions that are similar to CObArray::GetData.
e viarno che ukazateliat e const obache mozesh da mu napravish const_cast i sled tova da go delete [] *pData. Estestveno triabva da si setnesh i siza na CStringArraya na 0-la kakto i vsichki drugi state neshta ruchno.Ne sum go probval i ne znam dali raboti taka che ne davam garancii.
Oshte poveche ako e bug v sredata po dobre si zapishi poslednia service pack a ako i tam ne e opraven ne go pipai za da niama nesuvmestimost s novite versii na VS7. A i bi li mi kazal kak razbra che pametta ne se osvobozdava? Az pregledah source coda na RemoveAll i pri men vsichko e normalno(e imam mislia che poslednaia service pack za VS6).
CObject** GetData( );
Return Value
A pointer to the array of CObject pointers.
Remarks
Use this member function to gain direct access to the elements in the array. If no elements are available, GetData returns a null value.
While direct access to the elements of an array can help you work more quickly, use caution when calling GetData; any errors you make directly affect the elements of your array.
The following table shows other member functions that are similar to CObArray::GetData.
e viarno che ukazateliat e const obache mozesh da mu napravish const_cast i sled tova da go delete [] *pData. Estestveno triabva da si setnesh i siza na CStringArraya na 0-la kakto i vsichki drugi state neshta ruchno.Ne sum go probval i ne znam dali raboti taka che ne davam garancii.
niakolko principni zabelejki
SetSize(0, 10000)
posledwano ot 10000 Add si raboti chudesno
(alokira se pamet samo pri 1 Add
SetSize(10000, 10000)
posledwano ot 10000 SetAt e oshte po-dobre :)
a towa koeto si napisal alokira 10000 i sled towa inicializira sledwashtite
10000 ne che e kofti deto ima 2 alokirania na maswa no ne se inicilaizira
prawilno!!
Oswen towa ima Add koeto poluchawa const char *
taka che niama nujda da syzdawash wremenen CString obekt
zashtoto towa si e pak alokacia na pamet.
moje da probwash obache da naprwish pyrwo edin CString str("TEST");
i sled towa da wikash Add s nego - shte si spestish dosta pamet :))))
inache kato go gledam triabwa da se oswobodi wsichko??
posledwano ot 10000 Add si raboti chudesno
(alokira se pamet samo pri 1 Add
SetSize(10000, 10000)
posledwano ot 10000 SetAt e oshte po-dobre :)
a towa koeto si napisal alokira 10000 i sled towa inicializira sledwashtite
10000 ne che e kofti deto ima 2 alokirania na maswa no ne se inicilaizira
prawilno!!
Oswen towa ima Add koeto poluchawa const char *
taka che niama nujda da syzdawash wremenen CString obekt
zashtoto towa si e pak alokacia na pamet.
moje da probwash obache da naprwish pyrwo edin CString str("TEST");
i sled towa da wikash Add s nego - shte si spestish dosta pamet :))))
inache kato go gledam triabwa da se oswobodi wsichko??
Re: VC++ MFC CStringArray
Add : Adds an element to the end of the array; grows the array if necessary.
не мислиш ли че с Add правиш глупости
for (int i=0;i<10000;i++) m_strArr.Add(CString ("TEST");
добавяш още 10000 елемента
m_strArr.SetSize(10000,10000)
а тука не е ли по-добре вторият параметър да е -1
не мислиш ли че с Add правиш глупости
for (int i=0;i<10000;i++) m_strArr.Add(CString ("TEST");
добавяш още 10000 елемента
m_strArr.SetSize(10000,10000)
а тука не е ли по-добре вторият параметър да е -1
Re: VC++ MFC CStringArray
Osnovniq problem tuk e CString class v r. ver koqta zadelq blockove po 64 ,128,256,512 v zavisimost ot goleminat.Znachi Az sym s VC6.0 sp5 i W2k sp3
,ne znam dali ima po nov sp za vc6.0 .Ako nqkoi e sys VC6 sp5 i ne go marzi da go probva ste se radvam da mi kaza rezultata
,ne znam dali ima po nov sp za vc6.0 .Ako nqkoi e sys VC6 sp5 i ne go marzi da go probva ste se radvam da mi kaza rezultata
Re: VC++ MFC CStringArray
wypros za domashno, kakwo prawi FreeExtra? :))))))))))))))))
podskazka:
za kakwo sluji wtoria parametyr na SetSize?
otgowor:
wtroia parametyr na SetSize zadawa s kolko da se uwelichi
wytreshnia bufer w koito se paziat pointerite kym otdelnite obekti,
kogato se dobawia now element s Add.
t.e. ako wtoria parametyr e 10000 pri ednokratno izwikwane na Add
i prazen masiw se alokirat 10000 pointera, no masiwa ima razmer 1 !!!
pri sedwasthototo izwikwane na Add size stawa 2 a wyreshnia bufer
koito si e 10000 ne se promenia.
za razlika ako 2 parametyr na SetSize besehe 1, shteshe da se prawi
realokirane na bufera pri wseki Add a ne wednyj na 10000
FreeExtra prawi realokirane na bufera taka che da e s razmera na
masiwa.
wsichko towa obache niama niakakwo otnoshenie kym problema ti koito
ne mi e iasno zashto ( i dali??? ) se poiawiawa
podskazka:
za kakwo sluji wtoria parametyr na SetSize?
otgowor:
wtroia parametyr na SetSize zadawa s kolko da se uwelichi
wytreshnia bufer w koito se paziat pointerite kym otdelnite obekti,
kogato se dobawia now element s Add.
t.e. ako wtoria parametyr e 10000 pri ednokratno izwikwane na Add
i prazen masiw se alokirat 10000 pointera, no masiwa ima razmer 1 !!!
pri sedwasthototo izwikwane na Add size stawa 2 a wyreshnia bufer
koito si e 10000 ne se promenia.
za razlika ako 2 parametyr na SetSize besehe 1, shteshe da se prawi
realokirane na bufera pri wseki Add a ne wednyj na 10000
FreeExtra prawi realokirane na bufera taka che da e s razmera na
masiwa.
wsichko towa obache niama niakakwo otnoshenie kym problema ti koito
ne mi e iasno zashto ( i dali??? ) se poiawiawa