c语言 常见内存错误

来源:互联网 发布:在线看熊片的软件 编辑:程序博客网 时间:2024/05/01 18:34

                                                 常见内存错误

一  0xC0000005

    1   报错信息:

        未经处理的异常:  0xC0000005:  读取位置 0x00000000 时发生访问冲突。

     2  报错截图:

       

     3 错误代码:

    

#include"stdio.h"void main(){char * p = NULL;printf("内存异常处理:\n");printf("错误提示: 未经处理的异常:  0xC0000005:  读取位置 0x00000000 时发生访问冲突。\n");printf("错误原因: 使用了未初始化的指针\n");printf("解决办法: p = (char *)malloc(sizeof(char)*5);");memcpy(p, "abcd", strlen(p)); //未分配堆空间printf("%s\n",p);getchar();}

    4  解决办法

   5 正确的代码:

    

#include"stdio.h"void main(){char * p = NULL;printf("内存异常处理:\n");printf("错误提示: 未经处理的异常:  0xC0000005:  读取位置 0x00000000 时发生访问冲突。\n");printf("错误原因: 使用了未初始化的指针\n");printf("解决办法: p = (char *)malloc(sizeof(char)*5);\n");p = (char *)malloc(sizeof(char)* 5);//添加这行代码即正确memcpy(p, "abcd", strlen(p)); //未分配堆空间printf("输出字符串:%s\n",p);getchar();}

二   0xC00000FD(递归调用导致栈溢出):

 1 报错信息:

  0xC00000FD: Stack overflow

2 报错截图

3 错误代码

#include"stdio.h"sum(int num){if (num == 1)return 1;return sum(num - 1) + num;}void main(){int num = 0;num = sum(10000);printf("%d",num);getchar();}

4  解决办法

   把递归计算1到1000的和改成用循环(非递归)来计算

 

#include"stdio.h"int sum(int num){int i = 0;int sum = 0;for (i = num; i >= 1; i--){sum = sum + i;}return sum;}void main(){int num = 0;num = sum(10000);printf("%d",num);getchar();}


二   0xC00000FD(数组导致栈溢出):

1  报错信息:

0xC00000FD: Stack overflow

2 报错截图

3 错误代码

#include"stdio.h"void main(){    char ch[1020*1024];    getchar();}

4错误原因

栈空间只有1M ,大于1M的空间就会出现溢出的现象


5  解决办法

    a  申请堆空间

#include"stdio.h"void main(){char *ch = (char *)malloc(sizeof(char)* 1020 * 1024);getchar();}

    b  定义成全局变量

#include"stdio.h"char ch[1020 * 1024];void main(){getchar();}



    

0 0
原创粉丝点击