Считывание конца массива: работа в терминале против отладчика - PullRequest
1 голос
/ 22 марта 2011

Я обнаружил ошибку в моем коде, когда оператор if () проверял значение в конце массива.IE,

int arrayX [2];
if(arrayX [2])
    FunctionCall();

Это привело к вызову функции, которая по причинам, связанным с длиной указанного выше массива, пыталась подписать вектор с индексом за пределами допустимого диапазона, что приводило к ошибке.Однако ошибка произошла только при работе под отладчиком Xcode;всякий раз, когда я бегал под терминалом, это не происходило.Это заставляет меня подозревать, что когда я работаю под терминалом, память вне массива обнуляется или имеет тенденцию быть нулевой по какой-то другой причине.Оператор if проверяется для 80 различных «неисправных» массивов за цикл, поэтому маловероятно, что это совпадение, что он никогда не появится в терминале.

Просто для ясности, мой вопрос: почему нераспределенная или не связанная память удерживает нули при запуске под терминалом, а не при работе под отладчиком.

Ответы [ 3 ]

1 голос
/ 22 марта 2011

В чем именно вопрос? Какой бы ни был вопрос, ответ вероятен ... Генератор программ может сделать это, если захочет. Поведение примера кода не определено, поэтому поведение результирующей программы совершенно непредсказуемо.

1 голос
/ 22 марта 2011

Многие отладчики заполняют неиспользуемую память каким-то отличным шаблоном, так что происходит именно то поведение, которое вы описываете.

0 голосов
/ 22 марта 2011

Вы не можете точно сказать, какие данные находятся вне массива. Если будет какой-либо отладчик, который обнуляет эту часть памяти, то это может быть отладчик XCode, а не терминал. Поэтому для меня очень странно, что у вас не было проблем с терминалом !!
Вы сказали: «Оператор if проверяется на 80 разных« неисправных »массивах за цикл», подумайте вот о чем: вы уверены, что эти «разные» неисправные массивы фактически находятся в «разных» областях памяти (если это компилятор статических данных может поместить его в один раз место барана и повторно его использовать)? И компилятор (/ интерпретатор) может оптимизировать ваш код, а также позаботиться о памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...