Ошибка при попытке освободить указатель - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть код, подобный этому

void find_groupings ()

  int *bandwidths;
  int *execution_time;

  bandwidths = (int *)malloc(sizeof(int)*node_count); // node_count is glbl
  execution_time = (int *)malloc(sizeof(int)*node_count);
  //other mallocs, other code etc

  while (condition) {
    // lot of code
    find_bandwidths(bandwidths);
    find_execution_time(execution_time);
    //lot of code
  }

  free(bandwidths);
  free(execution_time);

}

ошибка кода в строке "free (execute_time);"

Thread 1 "vx_tutorial_exe" received signal SIGSEGV, Segmentation fault.
0xf7dd0cd9 in _int_free (av=0xf7f15780 <main_arena>, p=<optimized out>, have_lock=0) at malloc.c:4005
4005    malloc.c: No such file or directory.

Я могу гарантировать, что "execute_time" не выйдетграниц внутри find_execution_time () Я полагаю, что я освобождаю все malloc, которые я делаю в коде

Также обнаружил, что значение указателя для execute_time одинаково как раз перед тем, как оно падает на free () с использованием gdb

пробовал valgrind, но это не помогает, так как программа segfaults

В чем здесь проблема?

1 Ответ

0 голосов
/ 20 сентября 2018

вся проблема заключалась в том, что в malloc я произвел неверный тип

для буферов, я исказил его как

buffers  = (int *)malloc(sizeof(int)*node_count);

Это должно было быть

buffers  = (buffer *)malloc(sizeof(buffer)*node_count);

Буфер является структурным типом в моем коде.

Это настолько странно, что он сломался так, что его невозможно выяснить по сообщениям об ошибках.

Спасибо, Джереми!и pm100

...