Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.147.66.178] |
|
Сообщ.
#1
,
|
|
|
Тут либо я глючу, либо...
В общем я создаю массив: double* result = new double[maxSize]; , причем maxSize равно 730 (проверял), а sizeof result почему-то выдает мне 4 , и при заполнении массива, все итемы с индексом более четырех имеют неопределенное значение... У меня вместо графика сплошные обои из синих и красных линий.... Кто-нибудь помогите!.. пока меня в дурку не увезли... |
Сообщ.
#2
,
|
|
|
result у тебя - _указатель_ на double. А указатель на современных машинах - именно 4 байта.
Добавлено в : А что касается глюка Цитата то показывай, как ты там с этим массивом работаешь... все итемы с индексом более четырех имеют неопределенное значение |
Сообщ.
#3
,
|
|
|
sizeof(result) = 4, т.к. result обьявлен как double*, т.е. указатель на double.
sizeof(*result) будет зависеть от представления double, но тоже не даст определить размер динамического массива. Советую использовать std::vector<double>, либо передавать maxSize непосредственно. При использовании double* result = new double[maxSize], result[0..maxSize-1] или result+0..maxSize-1 будет в пределах массива. |
Сообщ.
#4
,
|
|
|
Цитата reporter @ 28.01.04, 22:08 А что касается глюка Цитата то показывай, как ты там с этим массивом работаешь...все итемы с индексом более четырех имеют неопределенное значение Ну как, в разных циклах добавляю значения, примерно таким методом: void CResult::SetResult(int index, double value) { result[index] = value; } Если приводить полностью пример, то там черт ногу сломит (много рассчетов)... Цитата При использовании double* result = new double[maxSize], result[0..maxSize-1] или result+0..maxSize-1 будет в пределах массива. А здесь я ничего не понял... Добавлено в : Получаю результат примерно так: double CResult::GetResult(int index) { return result[index]; } В другом месте я так же поступаю с int-ом, и все нормально работает... |
Сообщ.
#5
,
|
|
|
Простенький пример:
enum {maxSize = 730}; #define MAKE_RESULT(nSeed) ((nSeed)*2.0) int main(int argc, char* argv[]) { double *lpdResult = new double[maxSize]; //set values for (int nIndex=0; nIndex < maxSize; ++nIndex) lpdResult[nIndex] = MAKE_RESULT(nIndex); //change one to have "wrong" value lpdResult[100] = 100; //read values for (nIndex=0; nIndex < maxSize; ++nIndex) { if (lpdResult[nIndex] != MAKE_RESULT(nIndex)) printf("WOW! It's %f at %d instead of %f\n", *(lpdResult+nIndex), nIndex, MAKE_RESULT(nIndex)); } delete[] lpdResult; return 0; } Всё работает как и ожидалось. А вот твои: double CResult::GetResult(int index){ return result[index]; } void CResult::SetResult(int index, double value){ result[index] = value; } наводят на размышления о правильности работы с классом. result, надеюсь, переменная класса? Ещё раз советую использовать std::vector<double>, тем более, что используется класс. |
Сообщ.
#6
,
|
|
|
fatalist,
Для такого массива надо использовать другую формулу для вычисления выделенной под него памяти sizeof(double)*maxSize А если ты делаешь sizeof переменной, которая указывает в начало массива, то конечно он тебе вернет размер указателя. |
Сообщ.
#7
,
|
|
|
Цитата DGP @ 28.01.04, 22:57 наводят на размышления о правильности работы с классом. result, надеюсь, переменная класса? Да, конечно переменная класса... У меня есть еще класс, там так же используется int* m_result = new int[size]; - и все нормально работает... Добавлено в : Цитата DarkKo @ 29.01.04, 05:49 fatalist, Для такого массива надо использовать другую формулу для вычисления выделенной под него памяти sizeof(double)*maxSize А если ты делаешь sizeof переменной, которая указывает в начало массива, то конечно он тебе вернет размер указателя. Да, я уже понял, что был не прав... Добавлено в : Короче я сделал по другому: взял CArray<double, double> B) Спасибо всем за помощь! |
Сообщ.
#8
,
|
|
|
Цитата DGP, 28.01.04, 19:57 Ещё раз советую использовать std::vector<double>, тем более, что используется класс Для простых типов реккомендуется std::valarray<>. |