2015-11-27 9 views
-2

Я пытаюсь скомпилировать C++ на visual studio в первый раз, и я провожу ошибку.неинициализированная локальная переменная

/***Setup****/ 
struct id_priority{ 
    int id; 
    int priority; 
}; 
struct temp_heap{ 
    int id; 
    int priority; 
}; 

/**heapify up**/ 
void heapify(id_priority heap[], int index, int length, temp_heap temp){ 
} 

int main(){ 

    int *command_processed; 
    command_processed = new int[6]; 
    id_priority *heap; 
    heap = new id_priority[1000]; 

    temp_heap temp; 
    int index = 0; 
    int length = 0; 
    heapify(heap, index, length, temp); 
    return (0); 
} 

heapify (куча, указатель, длина, темп); В этой строке говорится, что используется неинициализированная локальная переменная «temp», , но этот код отлично работает на терминале в Linux. Я не знаю, что здесь не так.

+5

'temp' не инициализирован, поэтому он говорит, что это неинициализированным. – MikeCAT

+1

Невозможно включить предупреждения о компиляторе на терминале в Linux. – MikeCAT

+0

Чтобы быть понятным, переменная неинициализированная имеет неопределенное значение и использование [и неопределенное значение - неопределенное поведение] (http://stackoverflow.com/a/23415662/1708801). В вашем случае вы передаете «temp» по значению, что означает, что это приведет к неопределенному значению, и это вызовет неопределенное поведение. –

ответ

1

Мы не знаем, для чего следует инициализировать temp. Но вот два способа его инициализации. Я предполагаю, что вам нужны все 0 для своих полей.

temp_heap temp = {0, 0}; 

и

temp_heap temp; 
    temp.id = 0; temp.priority=0; 
Смежные вопросы