C / C ++ basi c struct не работает Visual studio - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть 2 простых структуры, и у одного есть массив второго.

При доступе ко второму моя программа падает в Visual Studio, но не в кодовых блоках.

То есть одна строка не работает, а другая -.

Может кто-нибудь объяснить, почему?

    struct buffer {
    uint64_t size;
    void* data;

};

struct list_of_buffers {
    uint64_t number_of_buffers;
    bool* active_buffers;
    struct buffer* array_of_buffers;
}buffer_list;




void alloc_fun(int size){
   buffer_list.array_of_buffers = (struct buffer*)calloc(0, sizeof(struct buffer) * size);

   //this one makes my program crash
   buffer_list.array_of_buffers[0].data = NULL;    

   //this one doesnt
   struct buffer tmp = buffer_list.array_of_buffers[0];
   tmp.data = NULL;
   }

Может кто-нибудь объяснить, пожалуйста?

1 Ответ

1 голос
/ 22 апреля 2020

Вы запрашиваете у calloc буфер 0 элементов:

 buffer_list.array_of_buffers = (struct buffer*)calloc(0, sizeof(struct buffer) * size);

то, что это возвращает, определяется реализацией согласно документации :

Если размер запрошенного пространства равен 0, поведение определяется реализацией: возвращаемое значение должно быть либо нулевым, либо уникальным указателем.

Так что я предполагаю, что Visual Studio возвращает нулевой указатель (таким образом, cra sh), а кодовые блоки - нет. Я думаю, что это то, что вы хотите:

buffer_list.array_of_buffers = (struct buffer*)calloc(size, sizeof(struct buffer) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...