Toggle navigation
科创
{{ getSearchSuggestionLabel(suggestion) }}
{{ part.text }}
查看更多
登录
 
注册
电波
论坛
专栏
应用
登录
注册
{{ getSearchSuggestionLabel(suggestion) }}
{{ part.text }}
查看更多
论坛
>
计算机科学
>
软件综合
文号
t60394
阅读
13208
回复
13
收藏
3
请教一个c++中与String相关的问题
vincentcai
2013/09/07
软件综合
IP:北京
写了一个程序,每当运行到第三次getstr()这个函数时总会报错(崩溃),具体位置是str2=“000”;这一句。请问这是为什么?以及我应该如何解决?
编译器vs2012
源代码下面发上来
main.rar
0.83KB
RAR
24次下载
来自:
计算机科学
/
软件综合
13
0
全部
只看作者
vincentcai
作者
13年4个月前
IP:未同步
566130
1楼
不对。。又看了一下,错误是在 data1.open("data",ios::app);
这一句产生的
加载全文
引用
评论
0
vincentcai
作者
13年4个月前
IP:未同步
566132
2楼
问题更新了,第七次调用data1.open("data",ios::app);的时候会报错:0x5D77341A (msvcp110d.dll) (pic.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0xFFFFFFFF 时发生访问冲突。
main.rar
0.83KB
RAR
27次下载
咋办啊QAQ
加载全文
引用
评论
0
金星凌日
13年4个月前
IP:未同步
566133
3楼
你这程序写的啊……g++直接报错了。加上#include<cstdlib>还是通不过编译。
加载全文
引用
评论
0
vcasm
13年4个月前
IP:未同步
566162
4楼
授鱼不如送渔,首先不提具体的问题,这个代码问题很多,需要以下几点提升:
1、提高代码效率
可以通过多阅读优秀的源码,学习编程技巧,举个例子,getstr的33行代码量实际上一句sprintf函数即可更高效的实现,getstr看似更细节的实现了功能,实际上使用了标准模块库,编译产生的代码长度更加远远大于只有sprintf的静态代码量,process1函数也需要优化。。。。
看似代码冗余仅仅影响效率,实际上很多bug都是不强壮的冗余代码中产生。
2、改善编程习惯
只是一份代码,也许以偏概全了
入口安全缺乏检查,代码是否运行在正常的环境中呢?比如这份代码文件如果没有正常打开,仅仅做了提示,文件打开失败却依然执行文件操作,另外子函数参数检查也没有。。。。
3、提升代码测试、检查的手段
很多程序崩溃并不止体现在执行到bug代码的那一刻,这个例子就是典型的体现,其实问题很简单,楼主多看看多想想
加载全文
引用
评论
0
vincentcai
作者
13年4个月前
IP:未同步
566180
5楼
回 4楼(vcasm) 的帖子
1、我编程语言学的很不好。平时从不在计算机上写程序,这次写这个的原因是要处理一堆文件。
然后,请问从哪里能了解更多的头文件中提供的函数呢?我原来从来没听说过sprintf这个函数。。。。
2、这个程序的目的就是处理一堆名称连续的文件。所以文件打开失败输出error这条语句相当于调试语句,我只需要知道打开成功没有。调试好后文件是一定能正常打开的。还有,请问什么是子函数参数检查?
3、按照您说的我重写了部分代码。崩溃依旧=- =
main.rar
1.01KB
RAR
30次下载
加载全文
引用
评论
0
金星凌日
13年4个月前
IP:未同步
566181
6楼
回 5楼(vincentcai) 的帖子
想了解C++的标准库,可以去这里:
XXXXXXXXXXXXXXXXXXXXXXXXX
加载全文
引用
评论
0
vincentcai
作者
13年4个月前
IP:未同步
566182
7楼
回 6楼(金星凌日) 的帖子
谢谢。。。。。
加载全文
引用
评论
0
金星凌日
13年4个月前
IP:未同步
566183
8楼
file.open(filename,ios::in|ios::binary);
if(!XXXXXXX_open())
cout<<"error1 "<<endl;
file.read(pic,16694);
file.close();
在这一段代码中,即使文件没有被正确打开,file.read仍会运行。
加载全文
引用
评论
0
vincentcai
作者
13年4个月前
IP:未同步
566184
9楼
回 4楼(vcasm) 的帖子
请问文件关闭后是还需其他操作么?问题与关闭文件有关否?
加载全文
引用
评论
0
vincentcai
作者
13年4个月前
IP:未同步
566186
10楼
回 8楼(金星凌日) 的帖子
我明白,但这应该不是造成崩溃的原因吧。这个程序运行的时候文件肯定会被正确打开的。
加载全文
引用
评论
0
vcasm
13年4个月前
IP:未同步
566190
11楼
回 5楼(vincentcai) 的帖子
说具体点吧:
首先定义 char strFileName[_MAX_PATH]={0};
请用
sprintf(strFileName,"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.mkv%05d.bmp",count);
替换整个getstr函数,getstr函数写的问题很多,排除bug没意义直接替换吧
其次检查process1函数里面data、p数组的赋值定义,这个结果数组不知道存在的意义,唯一产生结果运算是data[p[0]]=data[p[0]]|temp;其中data和p都没有赋值,不清楚作者是否默认编译器初始的数组空间全部都是置零的状态?如果这样为什么main函数里面批量处理文件?
实在有些不理解下面这样的写法
p[1]=p[1]+1;
if(p[1]==8)
{
p[1]=0;
p[0]=p[0]+1;
}
p[1]的意义在哪? 直接在数据指针寻址时X/8就是了,
还有,无论能不能100%保证程序都是按自己想法正确运行,所有条件判断的正确处理流程需要保证,这是正确的编程风格,这点不能保证以后会逼着你交很多学费的。
加载全文
引用
评论
0
vincentcai
作者
13年4个月前
IP:未同步
566197
12楼
回 11楼(vcasm) 的帖子
谢谢您。我对很多编程上的标准都不是很了解。也不知道应该怎么去做。所以写出来的东西问题一堆。。。呵呵呵
加载全文
引用
评论
0
全部
只看作者
在列表中查看
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
编辑
删除
{{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
保存
取消
我也是有底线的
保存中...
保存