169 похожих чатов

Хай Обьявляю массив, затем с помощью malloc'а выделяю память как раз

для этого массива и копирую туда данные из первого:
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))
работает.
Может кто сказать почему так просиходит?

9 ответов

28 просмотров

Ну это ошибка где-то, надо код смотреть. Ещё - не надо realloc.

Dmitrii- Автор вопроса
Ilya Zviagin
Ну это ошибка где-то, надо код смотреть. Ещё - не...

Что тогда использовать для изменения размера массива? Новый создавать?

Dmitrii- Автор вопроса
Ilya Zviagin
malloc + memcpy + free

ага, спасибо, попробую

Dmitrii
ага, спасибо, попробую

Но это не факт что причина проблемы, скорее всего даже нет

Dmitrii- Автор вопроса

нет, не в этом, уже нашёл. Проблема была в том, что для указания размера я использовал sizeof(array) * sizeof(array[0]) (то есть кол-во в байтах). А надо было просто указать размер в количестве интов т.к. юзаю (int*)realloc() Или нет. Чёт не то написал. Ищу дальше.

Dmitrii
нет, не в этом, уже нашёл. Проблема была в том, ч...

sizeof(array) надо было. Но это не проблема, просто памяти больше чем нужно выделяется

Dmitrii- Автор вопроса

int *array = (int*)malloc(size * sizeof(a[0])); вот здесь

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта