我有一个方法,将指针T带到有效的内存块.在该方法中,由于已知常量some_defined常量很小,因此不会产生堆栈溢出,因此以下是明智的吗?
if (T)
{
p = T;
q = T + k;
}
else
{
unsigned long long TT[2 * some_defined constant];
p = TT;
q = TT + k;
}
<code using p and q>
Run Code Online (Sandbox Code Playgroud)
除非我知道该方法被同时调用,否则我绝不会考虑这样做; 它被调用五次,每次调用都在一个单独的线程上.进行此类调用的方法使用OMP循环.如果调用OMP循环的调用方法是为了满足所需的额外内存并在T中预先分配,则需要从调用者请求分配10*some_defined常量字,如果在OMP循环中调用的方法分配2*some_defined常量然后才能很好地工作.如果有可能出现堆栈溢出的风险,那么可以在堆上分配10*some_defined常量字后调用top方法,这样做很有条件.
下面的函数旨在确定查询是否将返回任何行。在SQL中传递的是查询。如果导致错误,则函数应返回false。但是,当SQL =
SELECT TOP 1 [AU_ID]
FROM [dat].[model_80av2_v1_2941]
WHERE [AU_ID] IS NOT NULL AND convert(int, [AU_ID]) <> [AU_ID]
Run Code Online (Sandbox Code Playgroud)
由于未检测到错误,因此该函数错误地返回true。但是,在SQL Management Studio中执行相同的查询会导致错误:
消息232,级别16,状态3,行3类型int的算术溢出错误,值= -1000000000000000000000000000000000000.000000。
显然,该函数应该返回false,因为值不在int数据范围内,但错误处理未检测到错误。为什么?从其他帖子中,我的理解是SqlDataReader reader = cmd.ExecuteReader()应该导致错误。
private bool GetIfExists(string SQL, out int ErrorNumber, out bool Exists)
{
bool IsSuccess = true;
ErrorNumber = 0;
Exists = false;
try
{
using (SqlConnection cnn = new SqlConnection(_connectionString))
{
try
{
cnn.Open();
using (SqlCommand cmd = cnn.CreateCommand())
{
cmd.CommandText = SQL;
cmd.CommandTimeout = _commandTimeout;
try
{
using (SqlDataReader reader = …Run Code Online (Sandbox Code Playgroud)