C++程序内存问题
来源:互联网 发布:2016万方数据库免费 编辑:程序博客网 时间:2024/05/18 15:07
C++的指针为我们带来了方便,但也带来了程序调试中的困难。
如果不用指针,程序出错地方容易定位,修改起来很容易,比如java中的数组越界,会有很明确的提示。在C++中如果数据越界,它可能导致另一个数组不能正常使用,从而导致访问冲突。比如,笔者程序中的一段代码:
int data[500];
char str[10000];
while(fin.getline(str, 10000))
{
/*
把str中的数字分开,存储在data中.
比如:str="1232|23432|123|4545|3435|43535"
那么处理结果就是把data[]={1232,23432,123,4545,3435,43535}
*/
}
在之前的数据处理中程序没有一点问题,可是到后来处理就出现了问题,当fin.getline(str,10000)读取某一行数据时,程序中断,提示“*****:访问冲突”,只是知道现在str的长度,比以前要长很多,于是有了错误推断:getline一次接受的字符个数有上限。可是翻了资料,认真地看了C++中getline的实现,发现没有!无奈。。。。于是写了个小程序,对文件不做复杂处理,只是将文件中的字符读入,写入到另一个文件中,程序没有任何中断,顺利执行完毕,证明我的推断确实是错误的。
后来,忽然想起data数组可能在str长度变长时,出现越界,于是就把data的长度设为10000,也就是代码修改为:
int data[10000];
char str[10000];
while(fin.getline(str, 10000))
{
/*
把str中的数字分开,存储在data中.
比如:str="1232|23432|123|4545|3435|43535"
那么处理结果就是把data[]={1232,23432,123,4545,3435,43535}
*/
}
程序顺利执行,正常输出结果。
C++的访问冲突,多半儿是因为数组或动态申请空间造成。
还有容易出现错误的就是memset。这个函数一般用来对数组或动态申请的空间做清零处理,但是清零的长度设置要注意,否则也容易出现意想不到的错误。
- C程序内存分配问题
- C/C++程序中致命的内存分配问题
- C/C++程序中致命的内存分配问题
- C/C++程序中致命的内存分配问题
- 有关C语言程序内存问题的5条规则
- C/C++程序中致命的内存分配问题
- c/c++服务器程序内存泄露问题分析及解决
- C/C++程序中致命的内存分配问题
- 有关C语言程序内存问题的5条规则
- C程序内存分配
- C程序内存分布
- c程序内存分配
- c程序内存分布
- C 程序内存分配
- c程序内存布局
- C程序内存分配
- C程序内存分配
- C程序内存分配
- 存储过程语法及实例
- SDH设备维护经验浅谈
- 让apache支持WAP
- filter
- Linux中如何让进程在后台运行
- C++程序内存问题
- mysql null 值
- 博客整理续
- AMF3+JAVA的调用范例
- window.showModalDialog以及window.open用法简介
- HTML META的强大作用!
- Keil C51 uv2中sprintf打印char的问题
- set echo on/off,set term on/off,set feedback off,set heading off的问题
- 实战演习Windows XP远程桌面连接