Если вы обновили Firefox и Selenium до последних версий, пытаясь исправить эту проблему, и вы все еще сталкиваетесь с этой проблемой, возможно, вы обновили Firefox, используя «Перезапустить для обновления».
Завершите работу Firefox и убедитесь, что исполняемый файл Firefox больше не работает. Затем попробуйте свой тест. Он должен работать сейчас.
Я предполагаю, что это связано с тем, когда обновляется бинарный файл Firefox, когда вы используете «Restart to Update»
Никакой ; Вы не делаете , бросает результат, с тех пор:
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].
Как другое установленное, это не нужно для 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++.
В C Вы не должны бросать возвращаемое значение malloc
. Указатель на пустоту, возвращенную malloc
, автоволшебно преобразовывается в корректный тип. Однако, если Вы хотите, чтобы Ваш код скомпилировал с компилятором C++, бросок необходим. Предпочтительная альтернатива среди сообщества должна использовать следующее:
int *sieve = malloc(sizeof *sieve * length);
, который дополнительно освобождает Вас от необходимости волноваться об изменении правой стороны выражения, если когда-нибудь Вы изменяете тип sieve
.
Броски плохи, как указали люди. Особенно броски указателя.
Jenkins>Reload Configuration from Disk
или просто совершить нападки your-jenkins-server/reload. Обратите внимание, что, если Вы меняете имя задания, необходимо будет вручную сменить любую другую работу, которая пытается назвать переименованное задание.
– Kevin Cross
25 April 2013 в 07:38
В C Вы получаете неявное преобразование от void*
до любого другого (данные) указатель.
find
- you' ll должен использовать find_by name: params[:id]
, если бы Вы хотели сделать это; но это означает you' ре, которое только в состоянии использовать эти name
атрибут
– Richard Peck
15 June 2014 в 17:55
В C можно неявно преобразовать пустой указатель на любой другой вид указателя, таким образом, бросок не необходим. Используя можно намекнуть случайному наблюдателю, что существует некоторая причина, почему каждый необходим, который может вводить в заблуждение.