==【注意】==
程序语言只是我们与计算机交流并让计算机实现我们创造性思想的工具,可以并鼓励深入掌握一门语言,但千万别沉迷于钻某种语言的牛角尖,一定要把握好二者间的度

本帖属不定时连载贴,以试卷的形式提出一个比较基础的问题供大家思考讨论,问题的解析将在下一更新贴中一并给出,这样做是希望还不清楚问题的朋友有自己思考和讨论的时间,希望大家能从这些帖子中有所收获。

贴中问题属我在学习C\C++过程中遇到的一些语法或者比较隐晦的程序问题,其中有自己的总结,也不乏网络上搜索到的经典解析,在此分享给大家,希望能起到抛砖引玉的作用

我已认真检查过自己的帖子,但难免有疏忽,如大家在阅读过程中仍发现有问题,请及时通知,我会及时更正,以免误导大家,万分感谢^_^

【No.9 内存泄漏了么?】
由于连载形式,每帖第二部分都配有上一问题的解答。为了保持帖子的针对性和一致性,

[问题9]
请找出下面C代码的错误并想办法改正:

复制内容到剪贴板

代码:

#include<stdio.h>
#include<malloc.h>
#include<string.h>

void AllocateMem(char *ptr, int size)
{
  ptr = (char *)malloc(sizeof(char *) * size);
}

void main(void)
{
  char *p = NULL;
  AllocateMem(p,5);
  strcpy(p,"1234");
  printf("%s\n",p);
}

No.8 常量指针与指针常量浅析

问题浅析

复制内容到剪贴板

代码:

#include<iostream>
int main(int argc, char **argv)
{
  const char *str1 = "abc";  //无错误,声明str1为指向常量
                                         //的字符类型指针,并将其初始
                                         //化指向字符串"abc"
                                         //即str1是一个指向const char的普通指针
                                         //可以修改str1的指向,但是不能试图
                                         //通过对str1解引用去修改它所指向的内容
  
  char * const str2 = "abc";  //无错误,声明str2为指向普通
                                          //字符的常量指针,并将其初始
                                          //化指向字符串"abc"
                                          //即str2是一个指向普通char的常量指针
                                          //可以通过对str2解引用修改其指向的内
                                          //容,但是不能修改str2的指向

//根据以上两条定义,下面对以下赋值语句进行浅析
  str1[1] = 'B';  //错误:str1指向的是常量,因此其指向的内容不能被修改
  *str1[1] = 'B';  //语法错误,[ ]优先级高于*,因此先得到str1[1]这
                        //字符'b',然后试图对常量字符'b'进行解引用,出错
  *str1 = "ABC";  //错误:str1指向的是常量,因此不能试图通过对str1解引用
                          //修改其指向的值
  str1 = "ABC";  //正确:str1是一个指向常量的普通指针,因此可以修改str1
                        //的指向,本句执行后,str1指向新的字符串"ABC"

str2[1] = 'B';  //正确:str2是一个指向普通char类型的常量指针,可以通过
                      //对str2解引用修改其指向的值,这句执行后str2指向的字符串
                      //为"aBc"
  *str2[1] = 'B';  //语法错误,[ ]优先级高于*,因此先得到str1[1]这
                        //字符'b',然后试图对常量字符'b'进行解引用,出错
  *str2 = "ABC";  //错误:虽然可以通过对str2解引用修改其指向的值
                          //但是 *str2 得到的是一个字符变量,不能将字符串"ABC"
                          //赋值给一个字符变量
  str2 = "ABC";  //错误:str2是一个常量指针,不能修改它的指向

return EXIT_SUCCESS;
}

     本文转自Bill_Hoo 51CTO博客,原文链接:,http://blog.51cto.com/billhoo/733273如需转载请自行联系原作者

【No.9 内存泄漏了么】相关推荐

  1. [JS] 闭包与内存泄漏

    一句话总结闭包:函数里套函数,函数返回函数. 内存泄漏:每次外部函数执行的时候,外部函数的引用地址不同,都会重新创建一个新的地址.但凡是当前活动对象中有被内部子集引用的数据,那么这个时候,这个数据不删 ...

  2. android释放acitity内存,Android 内存泄漏分析与解决方法

    在分析Android内存泄漏之前,先了解一下JAVA的一些知识 1. JAVA中的对象的创建 使用new指令生成对象时,堆内存将会为此开辟一份空间存放该对象 垃圾回收器回收非存活的对象,并释放对应的内 ...

  3. C语言中的指针和内存泄漏

    对于任何使用 C 语言的人,如果问他们 C 语言的最大烦恼是什么,其中许多人可能会回答说是指针和内存泄漏.这些的确是消耗了开发人员大多数调试时间的事项.指针和内存泄漏对某些开发人员来说似乎令人畏惧,但 ...

  4. 初步判断内存泄漏方法

    有时候,内存泄漏不明显,或者怀疑系统有内存泄漏,我们可以通过下面介绍的方法初步确认系统是否存在内存泄漏. 首先在Java命令行中增加-verbose:gc参数, 然后重新启动java进程. 当系统运行 ...

  5. 野指针与内存泄漏那些事

    野指针:不是NULL指针,是指向垃圾内存的指针 野指针成因: 1.指针变量没有被初始化:指针变量在创建时同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存. 2.指针p被free或者d ...

  6. 介绍两个非常好用的Javascript内存泄漏检测工具

    内存泄漏对开发者来说一般很难检测因为它们是由一些大量代码中的意外的错误引起的,但它在系统内存不足前并不影响程序的功能.这就是为什么会有人在很长时间的测试期中收集应用程序性能指标来测试性能. 最简单的检 ...

  7. 内存溢出和内存泄漏的定义,产生原因以及解决方法(面试经验总结)

    一.定义(概念与区别) 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请 了一个integer,但给它存了long才能存 ...

  8. Unix下C程序内存泄漏检测工具Valgrind安装与使用

    Valgrind是一款用于内存调试.内存泄漏检测以及性能分析的软件开发工具. Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Goo ...

  9. 内存泄漏检测工具VLD在VS2010中的使用举例

    Visual LeakDetector(VLD)是一款用于Visual C++的免费的内存泄露检测工具.它的特点有:(1).它是免费开源的,采用LGPL协议:(2).它可以得到内存泄露点的调用堆栈,可 ...

  10. OpenCV中的内存泄漏检测

    转自:http://chaishushan.blog.163.com/blog/static/130192897200911685559809/ 内存泄漏时程序开发中经常遇到的问题. 而且出现内存泄漏 ...

最新文章

  1. 学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践
  2. android eclipse 下Device无设备问题解决
  3. 判断js变量是否定义,
  4. 房贷月供4300,10万够买支付宝定期,一年利息能否抵一个月月供?
  5. 基于vue2.0 + elementUI 后台管理平台
  6. 单片机软件模拟SPI接口—加深理解SPI总线协议
  7. React的静态类型检查
  8. 《metasploit渗透测试魔鬼训练营》学习笔记第九章--meterpreter
  9. 源码:Java集合源码之:哈希表(二)
  10. CIO圈子—CIO成长交流的平台
  11. Android将毫秒转为时分秒
  12. java常量池在哪里_java常量池在哪?有什么用处?
  13. Testbed单元测试
  14. Android 自定义ViewGroup 设置wrap_content无效解决办法。
  15. EXCEL文本函数-数字小写换大写-英文大小写互换
  16. 《CSS揭秘》-总结47个Css技巧(一):常用的背景与边框技巧
  17. Sony微单相机alpha6000 wifi远程控制(2)
  18. Vue指令之条件渲染
  19. JavaScript(第五天)—爱创课堂专业前端培训
  20. linux信号11sigtstp,Linux信号(signal)机制

热门文章

  1. ACM - 算法篇,基础题目
  2. eclipse 设置PythonIDE
  3. 使用结构、数组、循环和DataGridView写的分数统计小程序
  4. python函数def_python def 函数
  5. python环境离线复制_Python 离线环境
  6. ARP监控工具ARPalert常用命令集合大学霸IT达人
  7. 数据包注入重放工具aireplay-ng
  8. Visual Studio 2017启动x86的Android模拟器失败
  9. Android 游戏开发入门
  10. c++ 暂停功能_app下载功能背后的逻辑