Вызов неверного указателя приводит к неопределенным результатам для каждой спецификации. Это не обязательно провалится.
Обычно (CPU / OS / компилятор / ... зависимый) компилятор вообще не заботится об этом. Он просто дает то, что в настоящее время находится на этом адресе памяти. Например, в архитектуре x86 вы видите ошибку только в том случае, если адрес находится на странице памяти, которая не привязана к вашему процессу (или ваш процесс не имеет доступа к этому доступу), поэтому исключение будет вызываться процессором (ошибка защиты), которую ОС будет обрабатывать надлежащим образом (и, вероятно, приведет к отказу вашего процесса). Иногда используется трюк, чтобы доступ к адресу 0
всегда вызывал нарушение доступа: ОС устанавливает биты чтения / записи первой страницы адресного пространства в таблице страниц равным 0, так что любой доступ к этой странице будет всегда генерировать исключение.
Создайте текстовый файл со строками, Вы хотите ввести в sqlite программу командной строки, как это:
CREATE TABLE log_entry ( ); .separator "\t" .import logfile.log log_entry
и затем просто звонят sqlite3 database.db < commands.txt
Создайте отдельный текстовый файл, содержащий все команды, которые Вы обычно вводили бы в приложение оболочки sqlite3:
CREATE TABLE log_entry ( <snip> );
.separator "\t"
.import /path/to/logfile.log log_entry
Сохраняют его как, скажем, impscript.sql.
Создают пакетный файл, который называет оболочку sqlite3 с тем сценарием:
sqlite3.exe yourdatabase.db < /path/to/impscript.sql
Вызов пакетный файл.
На ноте стороны - при импорте, удостоверяются, что обернули ВСТАВКИ в транзакцию ! Это даст Вам мгновенное 10 000%-е ускорение.