博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试的问题 及回答
阅读量:4308 次
发布时间:2019-06-06

本文共 1674 字,大约阅读时间需要 5 分钟。

1、Postmessage 与 SendMessage的区别

  PostMessage该函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回,是异步消息模式。消息队列里的消息通过调用GetMessage和PeekMessage取得

  SendMessage该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回,SendMessage函数返回值为消息处理结果。

2、在一个动态链接库中new的内存能在另一个动态链接库中释放吗?

  当一个应用程序初始化的时候,首先被初始化的是C Run-Time Library,然后才是应用程序的入口函数,而Heap对象就是在C Run-Time Library被初始化的时候被创建的。

      对于动态链接的C Run-Time Library,运行库只被初始化一次,而对于静态连接的运行库,每链接一次就初始化一次,所以对于每个静态链接的运行库都拥有彼此不同的Heap 对象。这样在某种情况下就会出问题,导致程序崩溃,例如一个应用程序调用了多个DLL,除了一个DLL外,其他的DLL,包括应用程序本身动态连接运行 库,这样他们就使用同一个Heap对象。而有一个DLL使用静态连接的运行库,它就拥有一个和其他DLL不同的Heap 对象,当在其他DLL中分配的内存在这个DLL中释放时,问题就出现了。

3、几个内存问题

题一·:

void GetMemory( char *p ){   p = (char *) malloc( 100 );   }void Test( void ){   char *str = NULL;   GetMemory( str );   strcpy( str, "hello world" );   printf( str );}

  该题传入的形参是实参本身,而不是取地址,传入的形参在函数内部改变时并不能真正改变传入形参的值,执行完GetMemory(str)函数后,str依然为NULL.

题二

char *GetMemory( void ){     char p[] = "hello world";     return p;   }void Test( void ){     char *str = NULL;     str = GetMemory();     printf( str );}

   运行完str=GetMemory()时,str的值还是正确的,但是执行printf(str)时,printf内部的三个变量覆盖了str原有的直,网上解释为,p为局部变量,调用完GetMemery()后,P指向的内存释放,即str指向内存释放,所以打印的为不确定乱码

题三

void GetMemory( char **p, int num ){     *p = (char *) malloc( num );  }void Test( void ){     char *str = NULL;     GetMemory( &str, 100 );     strcpy( str, "hello" );     printf( str );}

   能够成功,但最好加上判断是否申请内存成功。

题四

void Test( void ) {
  char *str = (char *) malloc( 100 );   strcpy( str, "hello" );   free( str );   if(NULL != str)   {
    strcpy(str, "123456");     printf(str);   } }

 

  free()后应将str置为NULL,,不置为空,if内部操作的为野指针,会出现崩溃问题。。

 

转载于:https://www.cnblogs.com/fenglangxiaotian/p/9445283.html

你可能感兴趣的文章
href="javascript:void(0)"
查看>>
h:panelGrid、h:panelGroup标签学习
查看>>
f:facet标签 的用法
查看>>
<h:panelgroup>相当于span元素
查看>>
java中append()的方法
查看>>
必学高级SQL语句
查看>>
经典SQL语句大全
查看>>
log日志记录是什么
查看>>
<rich:modelPanel>标签的使用
查看>>
<h:commandLink>和<h:inputLink>的区别
查看>>
<a4j:keeyAlive>的英文介绍
查看>>
关于list对象的转化问题
查看>>
VOPO对象介绍
查看>>
suse创建的虚拟机,修改ip地址
查看>>
linux的挂载的问题,重启后就挂载就没有了
查看>>
docker原始镜像启动容器并创建Apache服务器实现反向代理
查看>>
docker容器秒死的解决办法
查看>>
管理网&业务网的一些笔记
查看>>
openstack报错解决一
查看>>
openstack报错解决二
查看>>