Я создал функцию, которая возвращает код ошибки (ErrCode
enum) и передает два выходных параметра. Но когда я печатаю результат функции, я не получаю правильные значения в массиве.Array as out in C++
// .. some codes here ..
ErrCode err;
short lstCnt;
short lstArr[] = {};
err = getTrimmedList(lstArr, &lstCnt);
// list returned array (for comparison)
for (int i=0; i<lstCnt; ++i)
printf("lstArr[%3d] = %d", i, lstArr[i]);
// .. some codes here ..
getTrimmedList
функция следующим образом:
ErrCode getTrimmedList(short* vList, short* vCnt)
{
short cnt;
ErrCode err = foo.getListCount(FOO_TYPE_1, &cnt);
if (NoError!=err) return err;
short* list = new short [cnt];
short total = 0;
for (short i=0; i<cnt; ++i)
{
FooBar bar = foo.getEntryByIndex(FOO_TYPE_1, i);
if (bar.isDeleted) continue;
list[total] = i;
++total;
}
*vCnt = total;
//vList = (short*)realloc(index, sizeof(short)*total);
vList = (short*)malloc(sizeof(short)*total);
memcpy(vList, list, sizeof(short)*total)
// list returned array (for comparison)
for (int i=0; i<lstCnt; ++i)
printf("lstArr[%3d] = %d", i, lstArr[i]);
return NoError;
}
где:
foo
является объектом, который содержит массивыFooBar
объектовfoo.getListCount()
возвращает количество объектов с типомFOO_TYPE_1
FOO_TYPE_1
является тип объекта, который мы хотим взять/списокfoo.getEntryByIndex()
возвращаетi
йFooBar
объект типаFOO_TYPE_1
bar.isDeleted
является флаг, который говорит, еслиbar
рассматривается как «удалено» или нет
Какая у меня ошибка?
Edit:
К сожалению, я скопировал неправильную линию. Я прокомментировал это выше и поставлю правильную строку.
Edit 2
не имеет контроля над возвратов foo
и bar
. Все их функции возвращают ErrCode
, а выходы передаются через параметр.
Это не код C++, то есть код C. Для C++ вы должны использовать ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector). –
И 'int main'. – chris