@aldexnotproger

Как работает malloc?

Есть вот такой код
#include <malloc.h>
#include <stdio.h>
#include <string.h>

int main()
{
	char **text = (char**)malloc(1000);
	for(int i = 0; i < 1000; i ++)
	{
		text[i] = (char*)malloc(100);
	}	return 0;
}

1 - размер элемента мвссива text[n] равен 8 а не 100
2 - в элементах массива содержится мусор

У меня один вопрос: почему все вышеперечисленное работает так?
Если вопрос некорректен, предлагайте правку
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
1. Вы выделили не массив символов, а массив указателей на символы. Соответственно, размер указателя - 8 байт.
2. C не инициализирует память, выделяемую malloc.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
firedragon
@firedragon
Senior .NET developer
От себя добавлю есть функции по очистке памяти, которые заполняют буфер по вашему адресу каким либо значением обычно 0
Ответ написан
@LASHKOAG
Си, Робототехника, Linux, Телеметрия, Разработчик
"... void * calloc( size_t number, size_t size );
Функция calloc выделяет блок памяти для массива размером — num элементов, каждый из которых занимает size байт, и инициализирует все свои биты в нулями."

cppstudio.com/post/846
Ответ написан
@bellatriks
fisherman
функция malloc(size_t size) выделяет память, равную size байт. В примере это явно не учтено, и нижеследующий for loop пройдется по неинициализированной памяти (1000 байт / 8 байт указатель = 128). Лучше всего использовать calloc из ответа выше, передав требуемое количество элементов и их размер.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
06 июн. 2020, в 11:17
500 руб./за проект
06 июн. 2020, в 11:15
33333 руб./за проект
06 июн. 2020, в 10:32
7000 руб./за проект