Неправильная обработка памяти (индексов), генерирующая неправильные значения из-за неправильного порядка потока управленC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Неправильная обработка памяти (индексов), генерирующая неправильные значения из-за неправильного порядка потока управлен

Сообщение Anonymous »

Я новичок в C++ и изучаю лямбды. Моя задача заключалась в реализации массива префиксов и массивов разностей. Когда я реализовал приведенное ниже, при запуске у меня всегда почему-то получалось A[0] = 21. Мне это кажется странным, поскольку я не вижу, где я изменяю A.
Изменение порядка так, чтобы prefix_arr шел после diff_arr, дает мне кажется правильный результат, однако я подозреваю, что полагаюсь на какой-то UB или, может быть, даже у меня есть какая-то ошибочная логика, которую я не могу здесь уловить? Может быть, я не собираюсь использовать std::array для передачи такой лямбды?
Пожалуйста, дайте мне знать, что не так, чтобы я мог научиться.
Пожалуйста, дайте мне знать, что не так, чтобы я мог учиться.
p>
#include
#include

auto main(void) -> int {
constexpr int N = 6;
const std::array A {{1, 2, 3, 4, 5}};
std::array P{};
std::array D{};

auto prefix_arr = [&](std::array &pref) {
pref[0] = 0;
for (size_t i = 0; i < N; i += 1) {
pref[i + 1] = pref + A;
}
};

auto diff_arr = [&](std::array &diff) {
for (size_t i = 0; i < N - 1; i += 1) {
diff = A[i + 1] - A;
}
};

// PROBLEMATIC ORDER?
//
prefix_arr(P);
diff_arr(D);
//
//
std::cout

Подробнее здесь: https://stackoverflow.com/questions/791 ... ncorrect-o
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»