c++how中的开关断开故障
switch break malfunction in c++ how?
我正在尝试运行以下代码:
SQLSMALLINT** column_types = new SQLSMALLINT*[*ColumnCount];
void** ColumnsData = new void*[*ColumnCount];
SQLINTEGER** rowLengths = new SQLINTEGER*[*ColumnCount];
int limit = *ColumnCount;
for(int i=0;i<limit;i++)
{
column_types[i] = new SQLSMALLINT();
SQLColAttribute(hStmt,i+1,SQL_DESC_TYPE,NULL,NULL,NULL,(SQLPOINTER)column_types[i]);
SQLSMALLINT type = *column_types[i];
switch(type)
{
case SQL_CHAR:
ColumnsData[i] = new SQLCHAR**[*RowCount];
for(int l=0;l<*RowCount;l++)
{
((SQLCHAR**)ColumnsData[i])[l] = new SQLCHAR[512];
}
rowLengths[i] = new SQLINTEGER[*RowCount];
SQLBindCol(hStmt,i+1,SQL_CHAR,ColumnsData[i],512,rowLengths[i]);
break; //<<<<<<<<<<<<<<<<<<<<<<<<<<<
case SQL_VARCHAR:
ColumnsData[i] = new SQLCHAR**[*RowCount];
for(int l=0;l<*RowCount;l++)
{
((SQLCHAR**)ColumnsData[i])[l] = new SQLCHAR[512];
}
rowLengths[i] = new SQLINTEGER[*RowCount];
SQLBindCol(hStmt,i+1,SQL_VARCHAR,ColumnsData[i],512,rowLengths[i]);
break;
case SQL_LONGVARCHAR:
ColumnsData[i] = new SQLCHAR**[*RowCount];
for(int l=0;l<*RowCount;l++)
{
((SQLCHAR**)ColumnsData[i])[l] = new SQLCHAR[512];
}
rowLengths[i] = new SQLINTEGER[*RowCount];
SQLBindCol(hStmt,i+1,SQL_LONGVARCHAR,ColumnsData[i],512,rowLengths[i]);
break;
case SQL_WCHAR:
ColumnsData[i] = new SQLWCHAR**[*RowCount];
for(int l=0;l<*RowCount;l++)
{
((SQLWCHAR**)ColumnsData[i])[l] = new SQLWCHAR[512];
}
rowLengths[i] = new SQLINTEGER[*RowCount];
SQLBindCol(hStmt,i+1,SQL_WCHAR,ColumnsData[i],512,rowLengths[i]);
break;
case SQL_WVARCHAR:
ColumnsData[i] = new SQLWCHAR**[*RowCount];
for(int l=0;l<*RowCount;l++)
{
((SQLWCHAR**)ColumnsData[i])[l] = new SQLWCHAR[512];
}
rowLengths[i] = new SQLINTEGER[*RowCount];
SQLBindCol(hStmt,i+1,SQL_WVARCHAR,ColumnsData[i],512,rowLengths[i]);
break;
case SQL_WLONGVARCHAR:
ColumnsData[i] = new SQLWCHAR**[*RowCount];
for(int l=0;l<*RowCount;l++)
{
((SQLWCHAR**)ColumnsData[i])[l] = new SQLWCHAR[512];
}
rowLengths[i] = new SQLINTEGER[*RowCount];
SQLBindCol(hStmt,i+1,SQL_WLONGVARCHAR,ColumnsData[i],512,rowLengths[i]);
break;
case SQL_DECIMAL:
ColumnsData[i] = new SQL_NUMERIC_STRUCT[*RowCount];
rowLengths[i] = new SQLINTEGER[*RowCount];
SQLBindCol(hStmt,i+1,SQL_DECIMAL,ColumnsData[i],512,rowLengths[i]);
break;
case SQL_NUMERIC:
ColumnsData[i] = new SQL_NUMERIC_STRUCT[*RowCount];
rowLengths[i] = new SQLINTEGER[*RowCount];
SQLBindCol(hStmt,i+1,SQL_NUMERIC,ColumnsData[i],512,rowLengths[i]);
break;
case SQL_SMALLINT:
ColumnsData[i] = new SQLSMALLINT[*RowCount];
rowLengths[i] = new SQLINTEGER[*RowCount];
SQLBindCol(hStmt,i+1,SQL_SMALLINT,ColumnsData[i],512,rowLengths[i]);
break;
case SQL_INTEGER:
ColumnsData[i] = new SQLINTEGER[*RowCount];
rowLengths[i] = new SQLINTEGER[*RowCount];
SQLBindCol(hStmt,i+1,SQL_INTEGER,ColumnsData[i],512,rowLengths[i]);
break;
case SQL_REAL:
ColumnsData[i] = new SQLREAL[*RowCount];
rowLengths[i] = new SQLINTEGER[*RowCount];
SQLBindCol(hStmt,i+1,SQL_REAL,ColumnsData[i],512,rowLengths[i]);
break;
case SQL_FLOAT:
ColumnsData[i] = new SQLREAL[*RowCount];
rowLengths[i] = new SQLINTEGER[*RowCount];
SQLBindCol(hStmt,i+1,SQL_FLOAT,ColumnsData[i],512,rowLengths[i]);
break;
case SQL_DOUBLE:
ColumnsData[i] = new SQLDOUBLE[*RowCount];
rowLengths[i] = new SQLINTEGER[*RowCount];
SQLBindCol(hStmt,i+1,SQL_DOUBLE,ColumnsData[i],512,rowLengths[i]);
break;
case SQL_BIT:
ColumnsData[i] = new SQLCHAR[*RowCount];
rowLengths[i] = new SQLINTEGER[*RowCount];
SQLBindCol(hStmt,i+1,SQL_BIT,ColumnsData[i],512,rowLengths[i]);
break;
case SQL_TINYINT:
ColumnsData[i] = new SQLSCHAR[*RowCount];
rowLengths[i] = new SQLINTEGER[*RowCount];
SQLBindCol(hStmt,i+1,SQL_TINYINT,ColumnsData[i],512,rowLengths[i]);
break;
case SQL_BIGINT:
ColumnsData[i] = new SQLBIGINT[*RowCount];
rowLengths[i] = new SQLINTEGER[*RowCount];
SQLBindCol(hStmt,i+1,SQL_BIGINT,ColumnsData[i],512,rowLengths[i]);
break;
case SQL_BINARY:
ColumnsData[i] = new SQLCHAR**[*RowCount];
for(int l=0;l<*RowCount;l++)
{
((SQLCHAR**)ColumnsData[i])[l] = new SQLCHAR[512];
}
rowLengths[i] = new SQLINTEGER[*RowCount];
SQLBindCol(hStmt,i+1,SQL_BINARY,ColumnsData[i],512,rowLengths[i]);
break;
case SQL_TYPE_DATE:
ColumnsData[i] = new SQL_DATE_STRUCT[*RowCount];
rowLengths[i] = new SQLINTEGER[*RowCount];
//>>>>>>>>>>>>>>>
SQLBindCol(hStmt,i+1,SQL_TYPE_DATE,ColumnsData[i],512,rowLengths[i]);
break;
case SQL_TYPE_TIME:
ColumnsData[i] = new SQL_TIME_STRUCT[*RowCount];
rowLengths[i] = new SQLINTEGER[*RowCount];
SQLBindCol(hStmt,i+1,SQL_TYPE_TIME,ColumnsData[i],512,rowLengths[i]);
break;
default:
break;
}
}
当它进入案例SQL_CHAR并中断时,它会在SQLBindcol调用之前跳到案例SQL_TYPE_DATE,这怎么可能,是故障还是我在这里做错了什么,因为中断应该退出开关
我假设您在某种调试器中看到了这种行为,并且我假设您已经构建了一个优化的构建。在这种情况下,您所看到的只是优化器重用代码——优化器通常会使调试变得有些困难,所以只需进行未优化的构建即可。
如果你真的没有在启用优化的情况下进行构建,我会尝试的第一件事就是进行完全的清理/重建(仍然没有优化),以确保你有一个一致的基础测试。
我想你这么说是因为通过调试器检查代码。在编译期间尝试禁用优化。
我建议注释掉除SQL_CHAR
之外的所有其他切换情况,看看会发生什么。如果调试器进入注释掉的代码,您必须进行优化。如果出现这种情况,请一次添加一个其他情况,并查看问题何时再次出现。这将缩小问题的根源。
相关文章:
- 分段故障(堆芯转储)矢量
- C++中的动态铸造故障
- 数组的指针从不分段故障
- 当套接字连接断开时检测C/C++Unix
- vscode g++链路故障:体系结构x86_64的未定义符号
- 访问被拒绝后,c++中的故障保护代码
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 调试 CUDA MMU 故障
- Geeksforgeeks C 程序故障排除:IEE 754 表示法为十进制
- 升压信号2将插槽传递到成员功能以断开连接
- Arch Linux.AUR 包 mysql 不能用 makepkg 构建.错误:构建 () 中出现故障
- 正在处理故障(堆芯转储)
- 在 Boost::fiber 中引发的BOOST_ASSERT故障 Visual Studio "Debug" 构建
- 如何进行故障排除:未定义对"非虚拟 thunk to ..."的引用
- C++函数过载会导致 SEG 故障
- 分段故障 运行C++代码时出现 SIGSEGV
- 当新的故障时,是否有必要留出一些紧急内存?
- Python & C-C++ 扩展模块案例段故障
- 带升压的 SEG 故障::make_shared / 特征3 内存.h.
- c++how中的开关断开故障