1

Тема: Вопрос по С++

Смотрел решение задачи на граф. И увидел

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <assert.h>

#define MAXN (100010)

typedef struct tag_node_t {
    int num;
    tag_node_t* next;
} node_t;

typedef node_t* list_t;

list_t adj[MAXN] = {0};
int res[MAXN] = {0};
int color[MAXN] = {0};
int count = 0;
int N = 0;
int M = 0;

void init() {
    for (int i = 1; i <= M; i++) {
        adj[i] = (list_t)malloc(sizeof(node_t));
        assert(NULL != adj[i]);
        adj[i]->num = 0;
        adj[i]->next = NULL;
    }
}


Но не понял момента когда используется

    adj[i] = (list_t)malloc(sizeof(node_t));
    assert(NULL != adj[i]);

2

Re: Вопрос по С++

Что такое malloc и assert?

3

Re: Вопрос по С++

http://www.cplusplus.com/reference/clib … rt/assert/
http://www.cplusplus.com/reference/clib … ib/malloc/

4

Re: Вопрос по С++

Я это уже читал, но там не понятно как-то neutral

5

Re: Вопрос по С++

malloc (x) - выделить память длиной x байт, и вернуть указатель на эту память.
Это нужно, когда мы хотим использовать массив какого-то размера, но заранее не знаем этот размер. Либо когда нам надо создавать структуры какого-то типа, но мы заранее не знаем, сколько их будет, - тогда каждый экземпляр такой структуры будем создавать отдельным вызовом malloc'а.

assert(expr) - вычисляет значение выражения expr, и если оно = false, то падает с рантаймом.
Удобно для всякого рода отладок. В режиме компиляции Release обычно этот макрос сам переключается в режим, когда вообще ничего не делает.

6

Re: Вопрос по С++

Спасибо! Так бы там и написали big_smile