Как изменить адрес массива в памяти?

Стоит задача, используя только указатели и malloc, выделить память под массив и перезаписать его туда.

#include <iostream>
#include <cstdlib>

int sizeOfArr = 4, quantityOfNumbers = 1;
float arr[1] = {0};
float *pointerNewArr = arr;

pointerNewArr = (float *) malloc(sizeof(float) * sizeOfArr);

for (i = 0; i < quantityOfNumbers; ++i){
    *(pointerNewArr + i) = arr[i];
}

arr = pointerNewArr;

Мой наивный ум думал, что такой код сработает, но как бы не старался, но перезаписать указатель массива на указатель pointerNewArr не получается.


Ответы (1 шт):

Автор решения: eri

arr адрес на стеке. Он задается компилятором и не меняется. pointerNewArr указатель, сначала указывает на arr, потом на новую область в куче. Переменную из стека в кучу не перенести.

Используйте указатели если хочется менять адрес.

#include <iostream>
#include <cstdlib>

int sizeOfArr = 4, quantityOfNumbers = 1;
float stackarr[1] = {0};
float *arr = stackarr;
float *pointerNewArr = arr;

pointerNewArr = (float *) malloc(sizeof(float) * sizeOfArr);

for (i = 0; i < quantityOfNumbers; ++i){
    *(pointerNewArr + i) = arr[i];
}

arr = pointerNewArr;
→ Ссылка