程序员进,学习java之前需不需要学习c语言

 
 
我真的不知道如何正确使用Valgrind的這是运行在什么想出了 Valgrind的应用ARG1
 
 
我GDB跑到底。我确信C库是用 -g 标志编译的。
 
...我的程序做了一些工作并启动一个后台线程...
...我键入似乎导致在下┅个命令段错误的命令;新线预计...
... I型,实际上触发段错误的命令新线程预期,因为该函数是在它自己的线程中运行如果它没有段错误,咜会产生相同数量的线程作为previous命令...
...我疯狂地通过gdb的帮助下阅读然后运行回溯...
 
...难道不应该有符号,如果我与 -g 编译我这样做,根据从输出線制作:

看起来像我已经解决了这个问题我将概述这里他人的利益。
 
分段错误的原因是我用的sprintf()来赋值给一个的char * 它没有被赋值指针。这里是坏code:
 
指针 ip_string 不这里有一个值这意味着它指向什么。但这并不完全正确。它所指向的是的未定义的它可以指向任何地方。因此在与 sprintf的赋值给它(),我无意中重写内存的随机位我认为,对于古怪行为的原因(虽然我从来没有证实了这一点)是未定义的指针指著堆栈上的某个地方这导致计算机混淆当某些函数的调用。
解决这个问题的方法之一是分配内存然后将指针指向内存,可与来实现的malloc()该解决方案将类似于这样:
 
这样做的问题是,每的malloc()需要通过调用匹配到免费() 或者你有一个内存泄漏。如果我称之为免费(ip_string)这个函数返回的指针将是无用的如果我不那么我必须依靠code,它在呼唤这里面函数释放内存这为pretty危险。
据我所知“正确”的解决方案,这是一个已分配的指针传递给函数这样它的功能是负责填补针对性的记忆。这样一来调用的malloc()和免费()可在code块进行。更安铨这里的新功能:
 
 
哪些原因会导致(C语言)一个Java本机功能,在进入段错误这样
如果您分配一个值尚未分配的内存的指针,你可能會意外地在堆栈上覆盖内存这可能不会导致立即失败,但是当你以后调用其他功能可能会导致问题。
我可以看看具体是什么东西這将有助于我壁球这种错误?
查找分割故障像任何其他事情是这样值分配给未分配的内存或提领一空指针。我不是这方面的专家但峩敢打赌,有many网络资源了解这一点
我怎么能写在未来code,这将帮助我避免这个问题
要小心使用指针,尤其是当你负责创建他们如果你看到一行code的,看起来像这样:
...然后寻找一条线看起来像...
...,并确保这条线来写所指向的内存了
《程序员》推荐C++ 图书三人谈
主持囚:熊节(透明)《程序员》杂志编辑,C-View成员
嘉 宾:孟岩(梦魇),联想公司掌上设备事业部应用开发处任职C-View成员。与侯捷先生合译《C++ Standard Library》一书
金尹(恶魔)上海天宇公司CTO,在《程序员》连载有“自由与繁荣的国度”系列文章
透明:“学C++用哪本书入门”这是被问得最多嘚一个问题。但是哪一本书是最好的入门书似乎很难找到答案。《C++ Primer》太厚《Effective C++》对读者要求比较高,《Essential C++》又常常被批评为“太浅”
其實说穿了:no silver bullet。想从一本书学会C++那是不可能的。有朋友问我如何学C++我会建议他先去找本数据结构书,把里面的习题全部用C++做一遍然后洅去看《Effective C++》。myan经常说“要在学习初期养成好习惯”我对此颇不以为然。
恶魔:很后悔当初买了《C++ Primer》因为从我个人角度来看,它的功能效用基本是和《The C++ Programming Language》重合当然对于入门来说,它还是很不错的但是《C++ Primer》太厚,一来导致看书极其不方便二来系统学习需要花比较长的時间。对于目前这个越来越快餐化的时代来说的确有很多不适合的地方,不过可以作为初学者的参考书现在我以一块K3 CPU的代价把它借给叻别人,希望我那位同事能够从中得到一些益处
如果已经具备了C基础,我建议看国内的书例如钱能的《 C++大学教程(第二版) 》。(如果沒有C的基础还是看谭浩强的C语言)这本书对C讲得还算比较清晰,有很多习题值得一做特别是最后的struct和union两个部分。其中的一些算法比较拖遝和繁琐(比如树和链表的遍历算法)读者可以尝试修改这些例子,作为最后对C语言的一些总结测试
梦魇:这个问题让我想起四五年湔的情形。今天对于C++有一点认识的人多半是从那几年就开始学C++了。那时根本没有品牌观念从书店里找一本C++书,如果看着还算明白就買下来。我记得那时候宛延闿、张国锋、麦中凡教授的书都受到很高的赞誉我个人最早的一本C++书是Greg Perry的一本书,今天想起来其实是一本咑着C++旗号的C语言教程。对我作用最大的一本书是国防科技出版社出版的一本书书名记不得了,作者叫斯蒂芬·布莱哈。
透明:还记得以前曾批评过一本C++书是北航出的,整本书就没有出现过class关键字那本书,说穿了其实只是介绍了C语言和iostream库的用法根本不能算C++。而当时我常瑺推荐的一本书是电子科技大学张松梅老师的C++教程那本书,直到今天来看也没有太大的问题唯一的缺憾就是由于年代久远,许多东西巳经过时了而对于一本技术书籍来说,“过时”是最不可接受的
总体来说,那时使用C++的人真是在“盲人摸象”不过这也有好处,就昰对C++的很多细节能搞清楚以后看到经典好书时比较容易理解;当然坏处就是概念不清,甚至都不知道C++和Visual C++、Borland C++到底有什么不一样
梦魇:整個90年代,其实大部分人对于C++的认识都似是而非一开始是等同于Borland C++,后来是等同于Visual C++和MFC所以一般来说,打着BC和VC旗号的书卖得很好人们觉得這就是C++。而我比较幸运布莱哈的那本书虽然从现在的眼光来看谈不上高超,但基本路子是对的可能是因为原书是给UNIX程序员的培训教材,所以没有让我一开始就形成“C++ == VC++”的认识
其实一直到1996年,我们那里搞计算机的都是唯Borland C++马首是瞻的到了VC 也出来了,MFC不再是神像了少数囚就开始以贬损MFC为乐了。我觉得这种态度是不对的
什么叫好的框架?我觉得在十几年的时间能够象MFC这样保持稳定并且不断进步的框架就昰好的框架可能我们在一些具体的设计问题上有不同看法,觉得“这个地方这么设计不是更漂亮吗”很多时候是的,但是这不重要偅要的是MFC成熟稳定、有十几年的成功经验,这是最了不起的东西
另外一点,MFC中间包括着学习Win32 API编程的最佳资料这是除了其framework方面之外的另┅个亮点。我现在使用Win32 API开发但是经常参考MFC的源代码,收获很大
透明:STL方面,我对于剖析它的源代码兴趣并不大毕竟里面源代码多是算法问题。所以《STL源码剖析》我也只是随便翻翻就束之高阁了。我觉得这本书用来做计算机系的数据结构和算法教材不错不知道有没囿老师乐意这样做。
对于STL我的态度一向都是“应用至上”。不过我一直认为SGI STL本身就是一本精彩的书,一本数据结构和算法的经典参考書同时也是泛型技术的参考书。想知道一个算法是如何实现的看看STL源代码就行;想知道如何使用type traits,STL源代码里面也有例子看别人写的書,总觉得隔着一层纱有点挠不到痒处的感觉。SGI STL的代码写得非常漂亮一个C++程序员如果不看看这本书,实在是可惜
梦魇:至于STL,除了《STL源码解析》之外我举贤不避亲,强烈推荐侯先生与我合译的那本《The C++ Standard Library》这本书质量之高是无需怀疑的。我现在手边常备此书随时查閱,对我帮助很大
透明:C++和Java相比,最大的优势就是它没有一个专门的公司来管它最大的弱点也是它没有一个专门的公司来管它。Java程序員在学会简单的语法之后立刻进入SUN提供的framework,一边用这个现成的framework做实际开发一边在开发过程中继续学习Java一些幽深的特性。而这个时候C++程序员恐怕还在问“VC和BCB哪个好”呢。这无疑是浪费时间
梦魇:刚才你说Java和C++的优劣,这个话题已经成了我们这个年代永不消失的声波了峩也不想再谈这个。不过有一点我得说清楚:现在我们很多用C++的人吃了不少苦头探过脖子去看看Java,觉得它真是太可爱了这种印象是不准确的。另外Java也不简单,而且会越来越庞大复杂在很多场合,Java还不具有竞争力至于将来如何,我看有些Java爱好者也过分乐观了似乎計算机科学界几十年解决不了的问题都可以借着Java的东风解决掉,恐怕没那么容易
透明:那当然。我再次强调:No Silver Bullet读书很重要,但古人说“行万里路读万卷书”,还是把“行路”放在“读书”前面尤其对于技术书籍,如果它不能帮我解决问题、不能给我带来非常实际的利益那么我是不会去读它的。恶魔说得对我们这个社会很快餐,我们这个行业尤其很快餐我们也只能努力适应它。

版权声明:本文为北京尚学堂原創文章未经允许不得转载。?

菜鸟程序员如何提高自己的逻辑思维和技术水平

1、 学习一门脚本语言

可以让你摆脱对底层语言的恐惧感腳本语言可以让你很快开发出能用得上的小程序。实践项目:

遍历本地文件系统 (sys, os, path)例如写一个程序统计一个目录下所有文件大小并按各种条件排序并保存结果

跟数据库打交道 (python sqlite),写一个小脚本统计数据库里条目数量

学会用各种print之类简单粗暴的方式进行调试

为什么要学脚本语言洇为他们实在是太方便了,很多时候我们需要写点小工具或是脚本来帮我们解决问题你就会发现正规的编程语言太难用了。

2、 用熟一种程序员的编辑器(不是IDE) 和一些基本工具

使用这些东西不是为了Cool而是这些编辑器在查看、修改代码/配置文章/日志会更快更有效率。

一定要少鼡少用图形界面

学会使用man来查看帮助

了解/etc目录下的各种配置文章,学会查看/var/log下的系统日志以及/proc下的系统运行信息

了解正则表达式,使鼡正则表达式来查找文件

对于程序员来说Unix/Linux比Windows简单多了,学会使用Unix/Linux你会发现图形界面在某些时候实在是太难用了相当地相当地降低工作效率。

未来必然是Web的世界学习WEB基础的最佳网站是W3School。

学习CSS如何选中HTML元素并应用一些基本样式(关键词:box model)

学习使用Javascript操纵HTML元件理解DOM和动态网页,网上有免费的章节足够用了。或参看 DOM

学习PHP,让后台PHP和前台HTML进行数据交互对服务器相应浏览器请求形成初步认识。实现一个表单提茭和反显的功能

跟完一个名校的网络编程课程,不要觉得需要多于一学期时间大学生是全职一学期选3-5门课,你业余时间一定可以跟上

學习一个+ Ajax (异步读入一个服务器端图片或者数据库内容)+JSON数据格式

做个小网站(例如:一个小的留言板,支持用户登录Cookie/Session,增、删、改、查仩传图片附件,分页显示)

买个域名租个空间,做个自己的网站

1、 C语言和操作系统调用

C语言和操作系统调用? 

重新学C语言,理解指针和內存模型用C语言实现一下各种经典的算法和数据结构。推荐《计算机程序设计艺术》、《算法导论》和《编程珠玑》

学习计算机科学囷编程导论

学习Unix/Linux系统调用(Unix高级环境编程),了解系统层面的东西

用这些系统知识操作一下文件系统,用户(实现一个可以拷贝目录树的小程序)

用fork/wait/waitpid写一个多进程的程序用pthread写一个多线程带同步或互斥的程序。多进程多进程购票的程序

学会使用gcc和gdb来编程和调试程序

学会使用makefile来编譯程序。

IPC和Socket的东西可以放到高级中来实践

写一些程序来操作Windows SDK中的资源文件或是各种图形控件,以及作图的编程

学习如何使用MSDN查看相关嘚SDK函数,各种WM_消息以及一些例程

这本书中有很多例程,在实践中请不要照抄试着自己写一个自己的例程。

不用太多于精通这些东西洇为GUI正在被Web取代,主要是了解一下Windows 图形界面的编程@virushuo 说:“ 我觉得GUI确实不那么热门了,但充分理解GUI工作原理是很重要的包括移动设备开發,如果没有基础知识仍然很吃力或者说移动设备开发必须理解GUI工作,或者在win那边学或者在mac/iOS上学”。

了解一下Java这种虚拟机语言和C和Python语訁在编译和执行上的差别从C、Java、Python思考一下“跨平台”这种技术。

3、Web的安全与架构

学习HTML5网上有很多很多教程,以前酷壳也介绍过很多峩在这里就不罗列了。

学习Web开发的安全问题

学习Web的静态页面缓存技术

学习Web的异步工作流处理,数据Cache数据分区,负载均衡水平扩展的構架。

尝试在前面开发过的那个Web应用中进行SQL注入JS注入,以及XSS攻击

把前面开发过的那个Web应用改成构造在Nginx + PHP-FPM + 静态页面缓存的网站

学习教科书裏数据库设计的那几个范式,1NF2NF,3NF……

学习数据库的存过,触发器视图,建索引游标等。

学习SQL语句明白表连接的各种概念(参看《SQL Join嘚图示》)

学习如何优化数据库查询(参看《MySQL的优化》)

实践任务:设计一个论坛的数据库,至少满足3NF使用SQL语句查询本周,本月的最新文章評论最多的文章,最活跃用户

学会使用SVN或Git来管理程序版本。

学会使用JUnit来对Java进行单元测试

学习C语言和Java语言的coding standard 或 coding guideline。(我N年前写过一篇关C语言非常简单的文章——《编程修养》这样的东西你可以上网查一下,一大堆)

推荐阅读《代码大全》《重构》《代码整洁之道》?

最后,洳果你想了解更多最新Java资讯希望从事IT技术相关的岗位和领取Java学习资料,欢迎关注“北京尚学堂”微信公众号?

更多猛料!欢迎扫描上方二维码关注北京尚学堂官方微信公众号 ( 资料领取验证消息:156)?

我要回帖

 

随机推荐