第一次来,不知道行情,问得太简单大家不要见笑,是关于内存错误类型的问题

时间:2021-10-08 16:19:17
昨天被问及

“对于一个编程丰富的程序员来说,在编程过程中可能碰到的内存错误的类型有哪些?比如说数组越界算一种”

大家给我一点意见

18 个解决方案

#1


指针末初始化就使用算一种.

#2


内存泄漏不知算不算错误?

对野指针进行操作.

#3


指针末初始化就使用算一种
----------
指针未初始化就使用算一种!! (五笔?)

对于一个编程丰富的程序员来说
--------------------
编程经验丰富?
那应该很少出错

#4


一个内存空间回收两次

#5


还有指针越界.

对已经delete了的指针进行操作.......

楼下继续

#6


他说经验丰富的意思就是说你既然已经编过很多
那么你曾经碰到过哪些问题

大概就是看看是不是真的经常编写代码

#7


数组下标超过上界或者下标为负
在某个文件定义了全局数组,但在另一个文件extern声明的时候使用了不正确的上界
指针越过动态分配的内存块
动态分配一块内存忘了释放
动态分配内存时,没有检查指针的有效性,即没有检查分配是否成功
动态分配内存时,不正确地修改了指针的值
使用诸如strcpy、strcat、gets等不检查边界的函数时,没有处理好目标越界
使用memcpy的时候没有考虑到区域重叠
在使用strcpy、strcat、printf等或类似的函数时,使用了NULL指针
声明了一个指针,但在没有为其分配空间时就使用它
在一个被频繁调用的函数内部使用指向字符串常量的指针,却没有加上static
通过函数返回一个自动变量,并使用它。
不恰当地转换指针的类型并使用它。

#8


偶也是初学者,摘录一下我也学习:
1.使用未分配空间的指针,使程序出现空指针被安排错误(NULL pointer assignment);
2.静态指针错误:函数体内静态指针虽然初始化了,但是静态指针在退出后仍占用内存,且保持其值,所以用一个不断变化的地址去初始化一个长期保持其值的静态指针是毫无意义的
 Ex:
   void main(void)
   {
    int s1=10;
    static int *s;
    s=&s1;
    printf("%s\n",s);
   }
3.在没有给整形变量指针分配空间的条件下,贸然将不明的某内存单元置位固定值也属于一种常见错误;
   Ex:
     ……
     int *s;
     *s=100;
     ……
4.(待续)

#9


一个内存空间回收两次

偶就会犯这种错误,还好偶不是编程丰富的程序员

#10


学习。。。

#11


to megaboy:
在一个被频繁调用的函数内部使用指向字符串常量的指针,却没有加上static
----
会有什么问题?

#12


楼上的朋友可以看一下:

http://community.csdn.net/Expert/topic/4292/4292165.xml?temp=6.541079E-02

#13


值得学习

#14


up

#15


指针指向了一个空的数据单元,没有实际意义,例如

main()
{int a=2;
 int b[3]={0,1,2};
 int*p;
}
 也就是说,没有给指针赋植,正确的程序为
main()
{int a=2;
 int b[3]={0,1,2};
 int*p;
 *p=a[3];
}

#16


偶用memcpy就考虑不到区域重叠

#17


递归容易导致错误,栈很容易在递归中满的!~~

#18


接贴啊,我晕啊,已经是11月分了啊  
接贴啊,我晕啊,已经是11月分了啊  


接贴啊,我晕啊,已经是11月分了啊  
接贴啊,我晕啊,已经是11月分了啊

#1


指针末初始化就使用算一种.

#2


内存泄漏不知算不算错误?

对野指针进行操作.

#3


指针末初始化就使用算一种
----------
指针未初始化就使用算一种!! (五笔?)

对于一个编程丰富的程序员来说
--------------------
编程经验丰富?
那应该很少出错

#4


一个内存空间回收两次

#5


还有指针越界.

对已经delete了的指针进行操作.......

楼下继续

#6


他说经验丰富的意思就是说你既然已经编过很多
那么你曾经碰到过哪些问题

大概就是看看是不是真的经常编写代码

#7


数组下标超过上界或者下标为负
在某个文件定义了全局数组,但在另一个文件extern声明的时候使用了不正确的上界
指针越过动态分配的内存块
动态分配一块内存忘了释放
动态分配内存时,没有检查指针的有效性,即没有检查分配是否成功
动态分配内存时,不正确地修改了指针的值
使用诸如strcpy、strcat、gets等不检查边界的函数时,没有处理好目标越界
使用memcpy的时候没有考虑到区域重叠
在使用strcpy、strcat、printf等或类似的函数时,使用了NULL指针
声明了一个指针,但在没有为其分配空间时就使用它
在一个被频繁调用的函数内部使用指向字符串常量的指针,却没有加上static
通过函数返回一个自动变量,并使用它。
不恰当地转换指针的类型并使用它。

#8


偶也是初学者,摘录一下我也学习:
1.使用未分配空间的指针,使程序出现空指针被安排错误(NULL pointer assignment);
2.静态指针错误:函数体内静态指针虽然初始化了,但是静态指针在退出后仍占用内存,且保持其值,所以用一个不断变化的地址去初始化一个长期保持其值的静态指针是毫无意义的
 Ex:
   void main(void)
   {
    int s1=10;
    static int *s;
    s=&s1;
    printf("%s\n",s);
   }
3.在没有给整形变量指针分配空间的条件下,贸然将不明的某内存单元置位固定值也属于一种常见错误;
   Ex:
     ……
     int *s;
     *s=100;
     ……
4.(待续)

#9


一个内存空间回收两次

偶就会犯这种错误,还好偶不是编程丰富的程序员

#10


学习。。。

#11


to megaboy:
在一个被频繁调用的函数内部使用指向字符串常量的指针,却没有加上static
----
会有什么问题?

#12


楼上的朋友可以看一下:

http://community.csdn.net/Expert/topic/4292/4292165.xml?temp=6.541079E-02

#13


值得学习

#14


up

#15


指针指向了一个空的数据单元,没有实际意义,例如

main()
{int a=2;
 int b[3]={0,1,2};
 int*p;
}
 也就是说,没有给指针赋植,正确的程序为
main()
{int a=2;
 int b[3]={0,1,2};
 int*p;
 *p=a[3];
}

#16


偶用memcpy就考虑不到区域重叠

#17


递归容易导致错误,栈很容易在递归中满的!~~

#18


接贴啊,我晕啊,已经是11月分了啊  
接贴啊,我晕啊,已经是11月分了啊  


接贴啊,我晕啊,已经是11月分了啊  
接贴啊,我晕啊,已经是11月分了啊