2016-01-17 3 views
-1

В моем классе структуры данных преподаватель дал нам простой код для печати элементов из массива с циклом. Я объявил массив с 10 элементами, но инициализировал 15 элементов со значением 5, чем печать 15 элементов, зная, что остальные элементы будут отображать значение мусора. Но он выводит только 5 элементов. На самом деле это показывает количество элементов, для которых я инициализирую массив. Я использую кодовые блоки 13.12. благодарит заранее.Добавление большего количества элементов, чем выделенное пространство

#include <iostream> 
using namespace std; 

int main(){ 
    int i,n; 
    int arr[10]; 
    n=15; 

    for(i=0;i<n;i++){ 
     arr[i] = 5; 
    } 

    for(i=0;i<n;i++){ 
     cout << arr[i] << endl; 
    } 

    return 0; 
} 
+1

Запись (или чтение для этого мата) вне границ * ничего * приводит к * неопределенному поведению *. Не делай этого. –

+0

Если вы делаете глупые вещи, вы сами по себе. –

+1

О, и если вы не знаете размер массива во время компиляции, используйте ['std :: vector'] (http://en.cppreference.com/w/cpp/container/vector), который позволяет вам устанавливать размер во время выполнения и, конечно, добавлять новые элементы во время выполнения. –

ответ

0

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

0

Этот тип кода вызывает неопределенное поведение, то есть код, поведение которого не определено стандартом, поэтому компиляторы могут делать все, что им нужно. Не делай этого. Другие примеры включают в себя неопределенное поведение

  • Деление на ноль
  • Чтение/запись в NULL указатель
  • Переполненная подписанные целые
  • Double бесплатно
  • и т.д ...
0

C++ компилятор не привязывайте проверку размера массива. Иногда он дает желаемый результат, в другое время он будет аварийно завершен. Это приведет к Неопределенное поведение.

Вы должны обязательно избегать этого.

1

Программа имеет неопределенное поведение, поскольку память за пределами массива была перезаписана.

И по этой причине в вашей системе программа выводила только 5 элементов. Переменная n была перезаписана значением 5 в следующем цикле, когда массив был инициализирован.

//... 
int arr[10]; 
n=15; 

for(i=0;i<n;i++){ 
    arr[i] = 5; 
} 
//... 
0

Это плохо кодируется с минимальными усилиями или исследованиями. Это ваша домашняя работа, по крайней мере, потратьте время на это, делая это правильно.

Вот некоторые немного помочь, но не все:

#include <iostream> 
using namespace std; 

int main(){ 
    int i,n; 
    int arr[10]; 
    n=15; 
    int x; 

    for(i=0;i<n;i++){ 
    arr[i] = x 
    cout << arr[i] << endl; 
    } 

return 0;  
} 

Существует несколько вещь, которую вы должны сделать, чтобы заставить его работать. Я не буду делать это!

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