2015-03-24 3 views
-5

Печать значений массивов digitArray и testo показывает неправильные значения.Получение неправильных значений массива

Display.cpp

#include <iostream> 
#include <stdio.h> 
#include <stdlib.h> 
#include <vector> 
#include "display.h" 

#define D0 26 
#define D1 27 
#define D2 28 
#define D3 29 
#define BL 15 
#define BM 16 
#define BR 4 
#define MI 5 
#define TL 10 
#define TM 11 
#define TR 6 
#define DOT 1 

int segmentArray[8] = {BL, BM, BR, MI, TL, TM, TR, DOT}; 
int digitArray[4] = {D0, D1, D2, D3}; 
int testo[4] = {260, 1,2,3}; 

//Sets all segments on 
void Display::test() { 
    std::cout << digitArray[0] << std::endl; 
    std::cout << D0 << std::endl; 
    std::cout << testo[3] << std::endl; 
    std::cout << segmentArray[0] << std::endl; 
} 

Display.h

class Display { 
    public: 
     void test(); 

    private: 
     int SegmentArray[8]; 
     int digitArray[4]; 
     int testo[4]; 
}; 

main.cpp

#include <iostream> 
#include <stdio.h> 
#include <stdlib.h> 
#include "display.h" 

int main() { 
    Display display; 
    display.test(); 

    return 0; 
} 

Выполнение этого кода дает мне:

35588 (incorrect, varies from time to time and appears to be some adress) 
26 (correct) 
0 (incorrect) 
15 (correct) 
+1

В отрывке, который вы опубликовали, нет никаких проблем. Пожалуйста, напишите [достаточно кода] (http://stackoverflow.com/help/mcve), чтобы продемонстрировать проблему. –

+1

Код работает отлично - http://ideone.com/i3qDzI - проблема в другом месте. –

+0

Просто добавил полный код. – Rarn34

ответ

0

Я проверить свой код и я получить эти значения:

26 
3 
26 
15 

Когда вы пишете digitArray [0], вы получите значение индекса 0 в массиве. Итак, 26 в вашем случае. Для второго выхода вы пишете Testo [3], так что вы получите далее индекс массива, поэтому значение 3. Помните, что массивы начинаются с индекса 0 в C++ ...

Перекомпилируйте код, возможно, ваш последний модификации не будут сохранены ... Ваш первый результат - это адрес.

+0

Я перепутал порядок выходов, когда редактируется сообщение. Я перекомпилировал его много раз, но все равно получаю неправильные значения для этих двух массивов. – Rarn34

+0

У вас есть глобальные переменные в Display.cpp, которые имеют то же имя, что и члены класса Display. В вашем «cout» это члены, которые используют не глобальные переменные. Сделайте выбор между переменными-членами и глобальными. – cradondy

0

calcSegments возвращает указатель на локальный массив, который был уничтожен к тому моменту, когда вы пытаетесь получить к нему доступ. Массивы весьма неприятные вещи, которые не могут быть возвращены (непосредственно) по значению, так что я хотел бы предложить возвращение

  • std::array<int, 8> если размер, как известно, 8 во всех случаях
  • std::vector<int> если размер может варьироваться.
+0

Я просто удалил весь метод calcSegments и перекомпилировал все. Я по-прежнему получаю неправильные значения. – Rarn34

+0

@ Rarn34: Вам лучше получить отладчик. Или уменьшите код до [минимального, автономного тестового примера] (http://stackoverflow.com/help/mcve), если вы хотите, чтобы люди отлаживали его для вас. –

Смежные вопросы