‮Сдвиг по фазе (kincajou) wrote,
‮Сдвиг по фазе
kincajou

Category:

malloc

Наверное, я уже спятил.

Ситуация: есть указатель, непроинициализированный ещё. Допустим, *ptr.

Вызываем функцию, которая выделяет память при помощи библиотечной malloc (пробовал и g_malloc тоже). Функция внутри себя проверяет, что память выделилась успешно, заполняет поля некой структуры, и выходит - возвращая нуль (а в случае ошибки возвращает -1).

В main проверяем состояние указателя до и после вызова это функции - в обоих случаях (!) он равен NULL, то есть malloc словно бы не сработал. При этом, ессно, любое обращение к полям вышеозначенной структуры даёт в лучшем случае segmentation fault.

Что за херота? Почему всегда оно работало, а щас вдруг перестало?

Вот фрагмент кода main.c:
  bcircular_t *Fifo;

  printf ("Before: %p\n", Fifo);
  result = bcircular_init (Fifo, 1024);
  printf ("(%d) After: %p\n", result, Fifo);


Фрагмент кода circular.c (всегда работавший и неоднократно применявшийся ранее):
....
int bcircular_init (bcircular_t *c, uint16_t depth)
{
   bcircular_verbose (c, "init ");
   c = (bcircular_t *)g_malloc0(sizeof(bcircular_t));
   if (c == NULL)
   {
      bcircular_verbose (c, "failed - can't alloc structures\n");
      return -1; /* fail */
   }
   else
   {
      .....
      return 0;
   }
}





Add А вот ИСПРАВЛЕННЫЙ фрагмент (поскрипана несущественная в данном случае часть кода):
int bcircular_init (bcircular_t **pc, uint16_t depth)
{
	bcircular_t *c;
	c = (bcircular_t *)g_malloc0(sizeof(bcircular_t));
	bcircular_verbose (c, "init ");
	if (c == NULL)
	{
		bcircular_verbose (c, "failed - can't alloc structures\n");
		return -1; /* fail */
	}
	else 
	{
		bcircular_verbose (c, "ok\n");
		*pc = c;
		return 0;
	}
}

Всё, работает. Без лишних вопросов стреляет в ногу.
Tags: жопа
Subscribe

  • Оказывается, гвинпин просто задавал вопросы!

    Надо же, а я и не понял, что ping_ving просто пришёл защитить Лженауку и заодно чем-то поинтересоваться. Т.е. это просто был такой…

  • Ещё один.

    Вот Вы паясничаете, но Вы не можете ответить, какого цвета грунт на Луне. А ведь можно ознакомиться с результатами спектрального анализа…

  • Голоса в их голове

    Почему тупые так любят тупо пиздеть про свою веру, зачем-то ещё и приписывая её тем, у кого её нет? add по мнению тупого веруна, я его забанил (и…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 35 comments

  • Оказывается, гвинпин просто задавал вопросы!

    Надо же, а я и не понял, что ping_ving просто пришёл защитить Лженауку и заодно чем-то поинтересоваться. Т.е. это просто был такой…

  • Ещё один.

    Вот Вы паясничаете, но Вы не можете ответить, какого цвета грунт на Луне. А ведь можно ознакомиться с результатами спектрального анализа…

  • Голоса в их голове

    Почему тупые так любят тупо пиздеть про свою веру, зачем-то ещё и приписывая её тем, у кого её нет? add по мнению тупого веруна, я его забанил (и…