Я подозреваю, что ваша настоящая проблема может заключаться в том, что pButton
является неверным указателем, поэтому сначала проверьте это.
Единственный способ быть на 100% уверенным в правильности указателя и указыватьправильно подобранный / выделенный объект никогда не должен использовать указатели, которые вы не создали, и никогда не принимать / возвращать указатели.Вместо этого вы будете использовать куки и искать свой указатель в каком-то виде поиска куки -> указателя (например, в хеш-таблице).По сути, не доверяйте пользовательскому вводу.
Если вас больше волнует поиск ошибок и менее 100% безопасность от таких вещей, как атаки переполнения буфера и т. Д., Вы можете использовать менее агрессивный подход.В сигнатуре вашей функции, где вы в настоящее время используете указатели на массивы, добавьте параметр размера.Например:
void someFunction(char* someString);
Становится
void someFunction(char* someString, size_t size_of_buffer);
Кроме того, принудительно завершайте массивы / строки в ваших функциях.Если вы достигли конца, и он не завершен нулем, обрежьте его.
Сделайте так, чтобы вы могли указать размер буфера при их вызове, вместо того, чтобы вызывать strlen (или эквивалентный) для всехваши массивы перед вызовом.
Это похоже на подход, использованный «безопасными строковыми функциями», созданными Microsoft (некоторые из которых были предложены для стандартизации).Не уверен, что это идеальная ссылка, но вы можете зайти в Google за дополнительными ссылками:
http://msdn.microsoft.com/en-us/library/ff565508(VS.85).aspx