Я использую результат malloc?

Если вы обновили Firefox и Selenium до последних версий, пытаясь исправить эту проблему, и вы все еще сталкиваетесь с этой проблемой, возможно, вы обновили Firefox, используя «Перезапустить для обновления».

Завершите работу Firefox и убедитесь, что исполняемый файл Firefox больше не работает. Затем попробуйте свой тест. Он должен работать сейчас.

Я предполагаю, что это связано с тем, когда обновляется бинарный файл Firefox, когда вы используете «Restart to Update»

2285
задан Engineero 9 November 2017 в 15:08
поделиться

5 ответов

Никакой ; Вы не делаете , бросает результат, с тех пор:

  • Это является ненужным, поскольку void * автоматически и безопасно способствуется любому другому типу указателя в этом случае.
  • Это добавляет помеху к коду, составы исполнителей не очень легко считать (особенно, если тип указателя долог).
  • Это заставляет Вас повторить себя, которые обычно плохи.
  • Это может скрыть ошибку, если Вы забыли включать <stdlib.h>. Это может вызвать катастрофические отказы (или, хуже, не вызывают катастрофический отказ до пути позже в некоторой полностью другой части кода). Рассмотрите то, что происходит, если указатели и целые числа по-другому измерены; тогда Вы скрываете предупреждение путем кастинга и могли бы потерять биты возвращенного адреса.Примечание: с неявных функций C99 не стали от C, и этот момент больше не является важным, так как нет никакого автоматического предположения, что необъявленные функции возвращаются int.

Как разъяснение, обратите внимание, что я сказал, что "Вы не бросаете", не "Вы не делаете потребность для кастинга". По-моему, это - отказ включать бросок, даже если Вы разобрались в нем. Нет просто никаких преимуществ для выполнения его, но набор потенциальных рисков, и включая бросок указывает, что Вы не знаете о рисках.

Также примечание, как комментаторы указывают, что вышеупомянутые переговоры о прямом C, не C++. Я очень твердо верю в C и C++ как отдельные языки.

Для добавления далее код напрасно повторяет информацию о типе (int), который может вызвать ошибки. Лучше разыменовать указатель, используемый, чтобы сохранить возвращаемое значение, "заблокировать" два вместе:

int *sieve = malloc(length * sizeof *sieve);

Это также перемещается length в переднюю сторону для увеличенной видимости и отбрасывает избыточные круглые скобки с sizeof; они только необходимы , когда аргументом является имя типа. Многие люди, кажется, не знают (или игнорируют) это, которое делает их код более подробным. Помните: sizeof не функция!:)

<час>

При перемещении length к передней стороне может видимость увеличения в некоторых редких случаях, нужно также обратить внимание, что в общем случае, должно быть лучше записать выражение как:

int *sieve = malloc(sizeof *sieve * length);

Начиная с хранения sizeof первый, в этом случае, гарантирует, что умножение сделано по крайней мере с [1 111] математика.

Сравните: malloc(sizeof *sieve * length * width) по сравнению с [1 113] второе может переполниться length * width, когда width и length меньшие типы, чем [1 117].

2118
ответ дан unwind 10 November 2017 в 01:08
поделиться
  • 1
    как Вы добавляете его к управлению исходным кодом?? Вы установите в каждой машине? – Peru 1 April 2014 в 10:20

Как другое установленное, это не нужно для C, но для C++. Если Вы думаете, что собираетесь скомпилировать свой код C с компилятором C++, для которых причин когда-либо, можно использовать макрос вместо этого, как:

#ifdef __cplusplus
# define NEW(type, count) ((type *)calloc(count, sizeof(type)))
#else
# define NEW(type, count) (calloc(count, sizeof(type)))
#endif

Тот путь можно все еще записать это очень компактным способом:

int *sieve = NEW(int, 1);

и это скомпилирует для C и C++.

163
ответ дан quinmars 10 November 2017 в 01:08
поделиться

В C Вы не должны бросать возвращаемое значение malloc. Указатель на пустоту, возвращенную malloc, автоволшебно преобразовывается в корректный тип. Однако, если Вы хотите, чтобы Ваш код скомпилировал с компилятором C++, бросок необходим. Предпочтительная альтернатива среди сообщества должна использовать следующее:

int *sieve = malloc(sizeof *sieve * length);

, который дополнительно освобождает Вас от необходимости волноваться об изменении правой стороны выражения, если когда-нибудь Вы изменяете тип sieve.

Броски плохи, как указали люди. Особенно броски указателя.

357
ответ дан chux 10 November 2017 в 01:08
поделиться
  • 1
    Вы don' t должны перезапустить Jenkins для забирания переименованного каталога задания. Можно Справиться Jenkins>Reload Configuration from Disk или просто совершить нападки your-jenkins-server/reload. Обратите внимание, что, если Вы меняете имя задания, необходимо будет вручную сменить любую другую работу, которая пытается назвать переименованное задание. – Kevin Cross 25 April 2013 в 07:38

В C Вы получаете неявное преобразование от void* до любого другого (данные) указатель.

86
ответ дан Keith Thompson 10 November 2017 в 01:08
поделиться
  • 1
    Не с find - you' ll должен использовать find_by name: params[:id], если бы Вы хотели сделать это; но это означает you' ре, которое только в состоянии использовать эти name атрибут – Richard Peck 15 June 2014 в 17:55

В C можно неявно преобразовать пустой указатель на любой другой вид указателя, таким образом, бросок не необходим. Используя можно намекнуть случайному наблюдателю, что существует некоторая причина, почему каждый необходим, который может вводить в заблуждение.

101
ответ дан Keith Thompson 10 November 2017 в 01:08
поделиться
Другие вопросы по тегам:

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