VC++ MFC CStringArray

11 отговора 341 прегледа
#1

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 .

Отговор
в отговор на lVO #2

Re: VC++ MFC CStringArray

Пробвай накрая да извикаш SetSize(0, 0).

Отговор
в отговор на Hahahaha #3

Re: VC++ MFC CStringArray

towa e source na RemoveAll:
_AFXCOLL_INLINE void CStringArray::RemoveAll()
{ SetSize(0); }

Отговор
в отговор на lVO #4

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

Отговор
в отговор на lVO #5

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).

Отговор
в отговор на lVO #6

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??

Отговор
в отговор на lVO #7

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

Отговор
в отговор на no_future #8

Re: VC++ MFC CStringArray

OTNOSNo ADD :grows the array if necessary.

Отговор
в отговор на lVO #9

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

Отговор
в отговор на tux #10

Re: niakolko principni zabelejki

Za zabelejkite sym syglasen:))

Отговор
в отговор на lVO #11

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

Отговор
в отговор на tux #12

Re: VC++ MFC CStringArray

Ami edinstverniq variqt spored men e da go probvash

Отговор