Здравствуйте LA Jazz, Вы писали:
LJ>typedef struct
LJ>{
LJ> int e1;
LJ> int e2;
LJ>} sA;
LJ>Как лучше осуществить возвращение массива структур sA из ф-ии:
LJ>1.
LJ>LJ>void f(sA* pSA, int* count)
LJ>{
LJ> int nmbSA = 4;
LJ> ...
LJ> sA *pRes = new sA[nmbSA];
LJ> ... // do something with array
LJ> pSA = pRes;
LJ> *count = nmbSA;
LJ>}
LJ>main()
LJ>{
LJ> int nmbSA = 0;
LJ> sA *pSA = 0;
LJ> f(pSA, &nmbSA);
LJ> if(pSA)
LJ> delete pSA;
LJ>}
LJ>
Этот вариант неправильный. Вообще ничего не сохранится. pSA останется равным нулю.
LJ>2.
LJ>LJ>void f(sA* pSA, int count)
LJ>{
LJ> int nmbSA = 4;
LJ> ...
LJ> sA *pRes = new sA[nmbSA];
LJ> ... // do something with array
LJ> memcpy(pSA, pRes, sizeof(sA)*(__min(nmbSA, count))
LJ> delete pRes;
LJ>}
LJ>main()
LJ>{
LJ> int nmbSA = 4;
LJ> sA *pSA = new sA[nmbSA];
LJ> f(pSA, nmbSA);
LJ> delete pSA;
LJ>}
LJ>
Это тоже некорректно.
корректно будет так:
void f(sA* & pSA, int &count)
{
int nmbSA = 4;
...
sA *pRes = new sA[nmbSA];
... // do something with array
pSA = pRes;
count = nmbSA;
}
main()
{
int nmbSA = 0;
sA *pSA = 0;
f(pSA, nmbSA);
if(pSA)
delete pSA;
}