`
chenqi210
  • 浏览: 79231 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ODBC的一个 stack around the variable 'xx' was corrupted

    博客分类:
  • ODBC
 
阅读更多

OS:windows7 32bit

g++ 4.5.2下编译正常,无错。vs2010下出问题stack around variable 'ac' is corruptted

 

bool
Connection::getAutocommit()
{
	SQLSMALLINT ac = 0;
	SQLRETURN ret = m_handle->getAttribute(
		SQL_ATTR_AUTOCOMMIT,
		ac);
	m_handle->checkError(ret);
	return ac == SQL_AUTOCOMMIT_ON;
}

 

查看了一些贴子,大多是关于内存越界访问的问题。但这个函数从正常的角度是看不出任何越界行为的。

无意当中将 ac的类型改为 SQLUINTEGER ,问题就自动消失了。

推测为ODBC驱动中,将SQL_ATTR_AUTOCOMMIT这个属性的值类型已经写死为SQLUINTEGER。所以,即使已经将ac指定为SQLSMALLINT也不能改变此属性所占据的内存大小。所以这个问题其实是odbc引发的访问超出了ac大小的界限。

在本机上

SQLSMALLINT 的实际类型为 short

SQLUINTEGER的实际类型为 unsigned long

而且ac正好是分配在栈上的。的确符合提示中的stack

//更改之后的代码
bool
Connection::getAutocommit()
{
	SQLUINTEGER ac = 0;
	SQLRETURN ret = m_handle->getAttribute(
		SQL_ATTR_AUTOCOMMIT,
		ac);
	m_handle->checkError(ret);
	return ac == SQL_AUTOCOMMIT_ON;
}
 

注:

   m_handle->getAttribute 对不同类型都有相应的重载,而不会发生中间的类型自动转换过程。

分享到:
评论

相关推荐

    Fullstack.React.The Complete Book on ReactJS and Friends.r20.2017.1.pdf

    书中还涵盖了React的一些基础知识,比如如何创建应用程序的第一个交互——“React the vote”,以及如何通过props(属性)来传递数据和使用JSX(JavaScript XML)来编写更加清晰和易于理解的代码。此外,读者将会...

    Determining the stack usage of applications.pdf

    Determining the required stack sizes for a software project is a crucial part of the development process. The developer aims to create a stable application, while not wasting resources. This ...

    两个stack来模拟实现一个队列

    本篇将详细解释如何使用两个栈(stack)来模拟实现一个队列(queue)的功能。 首先,我们要理解栈和队列的基本特性。栈是一种后进先出(LIFO,Last In First Out)的数据结构,其操作主要包括压入(push)和弹出...

    Fullstack Vue: The Complete Guide to Vue.js

    You will learn what you need to know to work professionally with Fullstack Vue: The Complete Guide to Vue.js You’ll build: A Server-Persisted Shopping Cart: Use the Flux-like library Vuex to manage...

    STACK1_SEGMENT_STACK.rar_STACK1 SEGMENT_stack segment stack

    压缩包内的文件名为`STACK1_SEGMENT_STACK.doc`,这可能是一个文档,详细介绍了如何在汇编语言中设置和使用栈段,以及可能包含了一些关于进制转换的实例代码。文档可能涵盖以下知识点: 1. **栈的基本操作**:压栈...

    C语言头文件 STACK

    C语言头文件 STACKC语言头文件 STACKC语言头文件 STACKC语言头文件 STACKC语言头文件 STACKC语言头文件 STACKC语言头文件 STACKC语言头文件 STACKC语言头文件 STACKC语言头文件 STACKC语言头文件 STACKC语言头文件 ...

    The Full Stack Developer Your Essential Guide to the Everyday Skills...

    “The Full Stack Developer Your Essential Guide to the Everyday Skills Expected of a Modern Full Stack Web Developer” Excerpt From: Chris Northwood. “The Full Stack Developer.” iBooks.

    Michael Stack:The State of Apache HBase

    该文档来自2013中国大数据技术大会上Apache HBase项目管理委员会主席Michael Stack的主题演讲。

    Design and Implementation of the lwIP TCP_IP Stack(中英文)

    包括: Design and Implementation of the lwIP TCP_IP Stack.pdf TCP/IP 协议栈 LwIP 的设计与实现.pdf

    Fullstack.React.The Complete Book on ReactJS and Friends.r32 2017.6.epub

    If you’d like to report any bugs, typos, or suggestions just email us at: react@fullstack.io1. Chat With The Community! There’s an unofficial community chat room for this book using Gitter. If you’...

    smashing the stack for fun and profit

    smashing the stack for fun and profit翻译

    Fullstack React The Complete Guide to ReactJS and Friends 2017 6 v32

    If you’d like to report any bugs, typos, or suggestions just email us at: react@fullstack.io1. Chat With The Community! There’s an unofficial community chat room for this book using Gitter. If you’...

    StackDocklet.zip

    StackDocklet是一款面向开发者和IT专业人士的工具,它允许用户在桌面上创建一个浮动的快捷方式堆栈,方便地管理和启动常用的应用程序、文件或目录。这个压缩包“StackDocklet.zip”包含了StackDocklet的主要组件和...

    UDP 协议栈STACK

    UDP 协议栈 IP。V1.3 - ARP timeout and ability to ... was received on the broadcast address. V1.1 - Added mac_tx_tfirst output to assist coupling to MAC layers that require a start of frame indication.

    Fullstack Vue 3_ The Complete Guide to Vue.js

    该书在2018年初版的基础上,不断修改增补,2021年更新为Vue 3.x,主要介绍Single-file components、Custom Events、Vuex and Server、Form Handling、Routing、Composition API、GraphQL等。共625页,内容详细全面,...

    Stack Requirements.pdf

    Keil RTX v5 kernel functions are executed in handler mode (using PendSV/SysTick/SVC) and the tables below lists the maximum stack requirements for the Main Stack (MSP) that the user should consider. ...

Global site tag (gtag.js) - Google Analytics