LINUX.ORG.RU

История изменений

Исправление SZT, (текущая версия) :

А какие способы есть в крестах, которых нет в Си? Я могу и в C сделать массив из char известного размера и из него использовать память.

А еще в Си есть VLA, так что можно сделать что-то типа такого

bool malloc_used = false;
void *ptr;
size_t vla_sz = sz;
if(need_huge_allocation)
{
  vla_sz = 0;
}
char vla[vla_sz];
if(need_huge_allocation)
{
  malloc_used = true;
  ptr = malloc(sz);
  if(ptr == NULL)
  {
    //...
  }
}
else
{
  ptr = vla;
}
//...
if(malloc_used == true)
{
  free(ptr);
}
Что насчет крестов?

Исправление SZT, :

А какие способы есть в крестах, которых нет в Си? Я могу и в C сделать массив из char известного размера и из него использовать память.

А еще в Си есть VLA, так что можно сделать что-то типа такого

bool malloc_used = false;
void *ptr;
size_t vla_sz = sz;
if(need_huge_allocation)
{
  vla_sz = 0;
}
char vla[sz];
if(need_huge_allocation)
{
  malloc_used = true;
  ptr = malloc(sz);
  if(ptr == NULL)
  {
    //...
  }
}
else
{
  ptr = vla;
}
//...
if(malloc_used == true)
{
  free(ptr);
}
Что насчет крестов?

Исходная версия SZT, :

А какие способы есть в крестах, которых нет в Си? Я могу и в C сделать массив из char известного размера и из него использовать память.

А еще в Си есть VLA, так что можно сделать что-то типа такого

bool malloc_used = false;
void *ptr;
size_t vla_sz = sz;
if(need_huge_allocation)
{
  vla_sz = 0;
}
char vla[sz];
if(need_huge_allocation)
{
  malloc_used = true;
  ptr = malloc(sz);
  if(ptr == NULL)
  {
    //...
  }
}
else
{
  ptr = vla;
}
//...
if(malloc_used == true)
{
  free(ptr);
}