вторник, 30 августа 2011 г.

Копал код

Натолкнулся на примерно следующую конструкцию (Каким-то чудом она долгое время использовалась только для случая, когда "все хорошо"):

const int maxSize = 8;

vector <SomeType> v[maxSize];
...
SomeFunction (&v[0][0]);



При этом функция SomeFunction принимает "двумерный массив" и имеет прототип:
SomeFunction(SomeType *);
У нее еще параметры размерности (скажем, vectorLength), но это не важно.

Никогда так не делайте!

Вектор - это не массив, а класс, который хранит в себе массив.
Более того, вектор часто выделяет больше памяти, чем требуется (для оптимизации времени работы), поэтому по адресу &SomeType[vectorLength] первый элемент второго вектора в массиве (v[1][0]) не будет лежать никогда.

Комментариев нет:

Отправить комментарий