Re: Возвращение массива из функции
От: PSP Беларусь  
Дата: 25.07.02 12:54
Оценка:
Здравствуйте 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;
}
Всегда Ваш, PSP.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.