线程引起溢出的问题!
dword dwAddr = 0;
void funcA( void *pData )
{
(struct stA *) pstA = (struct stA *)pData;
//pWnd是全局的
dwAddr = (dword)pstA->pWnd;
}
//线程函数
void *funcB( void *pParam )
{
printf( "A point: %u\n", dwAddr );
...//do some thing
printf( "B point: %u\n", dwAddr );
...//do some thing
printf( "C point: %u\n", dwAddr );
return NULL;
}
int main(void)
{
for(;;)
{
//确保线程已结束
sleep( 10000 );
printf( "D point: %u\n", dwAddr);
...//do some thing
printf( "E point: %u\n", dwAddr);
create_thread( NULL, NULL, funcB, NULL);
printf( "F point: %u\n", dwAddr);
}
return 0;
}
funcA是被先执行的,确保了dwAddr是有值!且执行后得到一个正确的值!
在main中多次启动了线程函数funcB,在第一次执行时A-F打印出来的值都是正确的!
但问题是第二次时,A-F打印是同一个值,但已经不正解了!
请问:各位高手,这样会是由于什么的情况引起的呢?
void funcA( void *pData )
{
(struct stA *) pstA = (struct stA *)pData;
//pWnd是全局的
dwAddr = (dword)pstA->pWnd;
}
//线程函数
void *funcB( void *pParam )
{
printf( "A point: %u\n", dwAddr );
...//do some thing
printf( "B point: %u\n", dwAddr );
...//do some thing
printf( "C point: %u\n", dwAddr );
return NULL;
}
int main(void)
{
for(;;)
{
//确保线程已结束
sleep( 10000 );
printf( "D point: %u\n", dwAddr);
...//do some thing
printf( "E point: %u\n", dwAddr);
create_thread( NULL, NULL, funcB, NULL);
printf( "F point: %u\n", dwAddr);
}
return 0;
}
funcA是被先执行的,确保了dwAddr是有值!且执行后得到一个正确的值!
在main中多次启动了线程函数funcB,在第一次执行时A-F打印出来的值都是正确的!
但问题是第二次时,A-F打印是同一个值,但已经不正解了!
请问:各位高手,这样会是由于什么的情况引起的呢?
...全文
相关推荐
浅析栈溢出使用栈时,地址超出了栈的合法范围
最坏的情况是,我们在调用该函数前保存的返回地址被修改了,这样的就出现了可怕的栈溢出漏洞,导致远程代码的执行。每个线程都有自己的一个栈,该线程中的所用函数共用此栈!栈的构造形式:1.
通过Stack Overflow线程栈溢出的问题实例,详解C++程序线程栈溢出的诸多细节
通过Stack Overflow线程栈溢出的问题实例,详解C++程序线程栈溢出的诸多细节
Android 异步获取网络图片并处理导致内存溢出问题解决方法
这样可以有效地减小加载到内存中的图片大小,降低内存占用,从而避免内存溢出。总结来说,解决Android异步获取网络图片并处理时的内存溢出问题,主要策略包括:1.
stackoverflow-27411885:堆栈溢出问题“如何使用 Glassfish 4 创建远程 EJB Bean?”
当我们面临“堆栈溢出问题”时,这通常意味着程序在执行过程中递归调用过深或者内存分配不当,导致Java虚拟机(JVM)的栈空间耗尽。
15道非常经典的Java面试题 附详细答案
理解并能解答这些问题,有助于提升Java程序员的专业素养。


进程/线程/DLL
