"new.db" - это база данных Sqlit3, которая содержит некоторую информацию о фильмах.
Его таблица PAGE состоит из десяти столбцов (примерный год производства, директор и т. Д. c.) И трех строк. Он не имеет ограничений типа «не может быть NULL» и т. Д. 1014 *. Я оставил некоторые ячейки пустыми.
Я могу запустить код c ++ (воспроизведенный ниже), который правильно выводит правильную информацию (в отладке я подавил ошибку).
Анализ кода по-прежнему выдает те же ошибки приведения («переполнение Arithmeti c: использование оператора« + »для 4-байтового значения и затем приведение результата к 8-байтовому значению»). «+» используется только в приращении итератора, поэтому я предполагаю, что это как-то связано с этим - хотя я чувствую, что могу быть совершенно не прав.
Мне просто интересно, может ли кто-нибудь помочь мне увидеть, где происходит несоответствие 4/8, и дать мне понять, к какому типу UB может привести.
Код (одна функция закомментирована, потому что операции sqlite были иметь место на существующей БД и поэтому не нужно было создавать):
#include <iostream>
#include <stdio.h>
#include <string>
#include "sqlite3.h"
using namespace std;
static int createDB(const char* s);
static int outputDB(const char* s);
static int callback(void* NotUsed, int argc, char** argv, char** azColName);
int main()
{
const char* dir = "C:\\Show\\me\\the\\way\\to\\sqlite\\new.db";
sqlite3* DB;
//createDB(dir);
outputDB(dir);
return 0;
}
static int createDB(const char* s)
{
sqlite3* DB;
sqlite3_open(s, &DB);
sqlite3_close(DB);
return 0;
}
static int outputDB(const char* s)
{
sqlite3* DB;
sqlite3_open(s, &DB);
string selection = "SELECT * FROM PAGE;";
sqlite3_exec(DB, selection.c_str(), callback, NULL, NULL);
return 0;
}
static int callback(void* NotUsed, int argc, char** argv, char** azColName)
{
for (int i = 0; i < argc; i++)
{
cout << azColName[i] << ": " << argv[i] << endl;
}
cout << endl;
return 0;
}