Внезапное значение NULL в объекте C ++ [дубликат]

Исправить ваш отступ. when не является аргументом действия set_fact, а задачи:

- name: SHMALL value for MEM less than 16G
  set_fact:
    shmall: 3670016
  when: ansible_memtotal_mb|int <= 16384

- name: SHMALL value for MEM is between 16G and 32G
  set_fact:
    shmall: 7340032
  when: ansible_memtotal_mb|int > 16384 and ansible_memtotal_mb|int <= 32768
25
задан Christian Daley 16 January 2013 в 03:08
поделиться

3 ответа

Ключ такой:

static int *pieces;

Вы сказали, что положили это в свой заголовок. Это не способ экспорта символа. Любой файл, который содержит заголовок, получит свою собственную статическую версию неинициализированного указателя под названием pieces.

Вместо этого вы помещаете это в свой заголовок:

extern int *pieces;

extern int init_pieces();

И в исходный файл, вы делаете это:

static const size_t num_pieces = 128;

int *pieces = 0;

int init_pieces()
{
    pieces = malloc( num_pieces * sizeof(int) );
    return pieces != NULL;
}

Теперь, когда вы включаете заголовок, ваш исходный файл будет знать, чтобы получить pieces откуда-то еще, и будет ожидать, когда компоновщик будет работать там где. Я также предложил функцию init для массива. Однако я не добавил функцию 'release'.

Обратите внимание, что это все C, а не C ++. Если вы используете C ++, вы действительно должны использовать new или еще лучше, используйте vector.

Кроме того, при использовании статики в C ++ помните об этом: Статический порядок инициализации C ++

14
ответ дан Community 22 August 2018 в 09:53
поделиться

Для высокопроизводительного кода на разных архитектурах вам может понадобиться выделение malloc-y, а не родовое новое. Это связано с тем, что вы могли бы обернуть его чем-то вроде mymalloc (), а затем использовать функции, зависящие от архитектуры, такие как те, которые реализуют правильное выравнивание, чтобы избежать промахов в кеше и выполнять другие отличные вещи, предоставленные производителем оборудования, например IBM (Bluegene) или Intel (MIC). Все эти оптимизированные процедуры распределения имеют структуру типа malloc.

1
ответ дан Joel Giedt 22 August 2018 в 09:53
поделиться
1
ответ дан topin89 5 November 2018 в 07:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: