При повторном переборе массива всегда возвращается последнее значение

226
28 декабря 2021, 07:50

Вроде простейшая задача, но какая-то фигня. Сам код:

    label1->Text = "";
    label4->Text = "";
    using namespace std;
    int** circles = new int*[5];
    srand(time(NULL));
    for (int i = 0; i < 5; i++) {
        int X = 50 + rand() % 600;
        int Y = 50 + rand() % 500;
        int coord[2] = { X, Y };
        circles[i] = coord;
        label1->Text += i.ToString() + ": " + circles[i][0].ToString() + ":" + circles[i][1].ToString() + "\n";
    }
    for (int i = 0; i < 5; i++) {
        label4->Text += i.ToString() + ": " + circles[i][0].ToString() + ":" + circles[i][1].ToString() + "\n";
    }

Повторный перебор массива возвращает в label4 только последнее значение. Как с этим быть?

Answer 1

Массив coord - локальный массив в теле цикла. Он уничтожается в конце каждой итерации цикла.

То есть в итоге у вас все указатели в массиве circles указывают на уже уничтоженные массивы. Дальнейшее поведение пне определено. Зачем вы сохраняете указатели на массивы, которые тут же будут уничтожены?

Ваше "только последнее значение" - это не более чем случайное проявление неопределенного поведения.

READ ALSO
ACMP Сортировка выбором

ACMP Сортировка выбором

В этой задаче вам предлагается реализовать сортировку выбором

130
Как правильно использовать класс SqlConnection

Как правильно использовать класс SqlConnection

Недавно начал работать с классом SqlConnectionЯ написал обёртку databaseHelper, и у меня возникла проблема

155
Эмулятор Android не видит IIS-сервер ASP.NET CORE

Эмулятор Android не видит IIS-сервер ASP.NET CORE

Пытаюсь получить доступ к серверу из приложения на эмуляторе андроид с помощью RestSharp:

215
Деление числа на разряды

Деление числа на разряды

Не знаю как сделать на c#Помогите плз :\

120