源作者:技术小企鹅
c语言程序无法运行在C语言中对内存的使用很多新手的程序员会犯很多错误 ,而C语言内存错误往往会导致程序的崩溃无法运行,特别是使用指针对地址操作的时候,或者是对堆空间使用的时候最容易犯内存错误,今天和大家分享一下在C语言中比较常见的错误问题以及解决办法。
在使用指针的时候,你的指针没有指向一个合法的内存地址,什么意思呢?你定义了一个指针,但是并没有给他分配内存,这时候就会导致内存错误,很简单的就比如 ,int * p ; 你没有给p一个空间,然后后期再使用的时候会存在内存云问题,他不知道指向了内存的哪个地址,一般定义指针初始化都需要将他指向NULL。在这里举一个更深入的问题,我们看一下下面的代码:
我们一起来分析一下这个代码有什么问题,首先可能刚刚接触结构体的新手觉得没有什么问题,这是正常给一个结构体的两个成员变量赋值,但是我们仔细看一下我们有一个成员是指针类型,按照我们结构体的内存分配只给了name这个指针分配了四个字节的空间,name我们定义了但是没有给他初始化,换句话说就是,name指针没有指向一个合法的内存空间,可能指向的内存里面都是乱码,我们在调用strcpy给他赋值“张三”的时候,就把它往那堆乱码上覆盖,但是这块内存name指针时没有权限访问的,强行赋值只会导致错误。对于这类问题,解决办法就是申请指针的时候就malloc一块空间给它。
在结构体指针这一块出来上面的错误有的人还会犯下面的错误我们来看一下代码:
上面的代码为结构体指针分配了一个地址,但是同样忽略了结构体里面name指针的地址,解决的办法和上面的一样,就是在结构体里面定义name指针的时候就malloc一块空间。
另外一个指针内存错误问题就是越界问题,很多新手都会犯这样的错误,上面叫越界呢?举一个简单的例子,就是说你申请了4个内存空间,但是你却给他装5个东西,这时候就会报错,反过来人家本来就只有4个东西,你非要拿出5个东西了,那你拿出来的第五个东西是不合法的,也会报错。这样的问题其实相对来说比较好解决,我们在申请空间的时候不要吝啬,多给他一点就可以了。
记住另外一点,我们在使用指针的时候,首先你定义的类型要很清楚,然后需要分配多少内存要去申请出来,如果还不使用或者是暂时没有想好需要多少内存空间的是会后记住把它指向NULL,防止野指针的出现,使用的时候再malloc,说到malloc我就得再多提醒一下各位,你申请多少就要释放多少,不然会出现内存泄露问题,内存泄漏问题对程序来说也是致命的,在使用完之后我们呢free掉指针,然后在把它指向NULL就完成了一个指针从申请、使用、释放的过程。