для этого массива и копирую туда данные из первого:
int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int size = sizeof(a) / sizeof(a[0]);
int *array = (int*)malloc(size * sizeof(a[0]));
memcpy(array, a, size * sizeof(a[0]));
Затем провожу некоторый операции. В одной из них юзаю realloc():
size+=10;
array = (int*)realloc(array, size * sizeof(int));
У меня выделяется память и размер массива увеличивается.
Но первый элемент(то есть с индексом 10) из новой выделенной памяти равен рандомному числу, как при выходе за границы массива.
Ещё интереснее то, что это исправляется если перед realloc()ом просто запринтить старый массив(даже просто
printf("%lu\n"sizeof(array))
работает.
Может кто сказать почему так просиходит?
Ну это ошибка где-то, надо код смотреть. Ещё - не надо realloc.
Что тогда использовать для изменения размера массива? Новый создавать?
malloc + memcpy + free
ага, спасибо, попробую
Но это не факт что причина проблемы, скорее всего даже нет
нет, не в этом, уже нашёл. Проблема была в том, что для указания размера я использовал sizeof(array) * sizeof(array[0]) (то есть кол-во в байтах). А надо было просто указать размер в количестве интов т.к. юзаю (int*)realloc() Или нет. Чёт не то написал. Ищу дальше.
sizeof(array) надо было. Но это не проблема, просто памяти больше чем нужно выделяется
int *array = (int*)malloc(size * sizeof(a[0])); вот здесь
Обсуждают сегодня