请教这段代码的指针哪里有有关问题
请问这段代码的指针哪里有问题?
char *pRead = new char[fr.GetLength()-37336];
char pBuf[5] = {0};
char pbuffer[100];
int a=0;//计数
fw.Write( "U-D E-W N-S ",17);
char s[4] = "\r\n " ;
fw.Write(s,2);
if (int nRead = fr.Read(pRead, fr.GetLength()-37336))
{
for (int n = 0; n <nRead; )
{
pbuffer[0]=pRead[n];
pbuffer[1]=pRead[n+1];
sprintf(pBuf, "%02d ",*(short int*)pbuffer);
fw.Write(pBuf, 3);//写第n秒垂直向数据
fw.Write( " ", 4);
......
运行后有如下提示:
Debug Assertion Failed!
Program:C:\Program Files\****\Your.exe
File:filecore.cpp
Line:118
For information on how your program can cause an assertion
failure,see the Visual C++ documentation on asserts.
(Press Retry to debug the application)
终止 重试 忽略
点击忽略后一切正常,别人说是指针的问题,哪个地方错了呢
------解决方案--------------------
nRead 是否超出整数范围(nRead <32768)?
------解决方案--------------------
把 debug 改成 release
试试..
--------
方法:
vc --> build --> set active configuration //我用的是vc6
改dubug 为release
------解决方案--------------------
楼上的误人...
晕.纯粹是掩人耳目.. debug出错,说明程序有问题 改成release 也许掩盖了问题,但万一指针问题在某种输入下带来致命问题呢?
由于代码里不少未定义的变量,本人不是很清楚.粗看没什么问题.
有两个问题是:
1.是你的for确定没有第3表达式?
2.假设数组是5(虽然看你的代码 仿佛数字很大,这里就简单的说)
nRead最大值是5;(即完全输入)
当n是4的时候 符合for的条件;
pRead[n+1];就成了pRead[5]了...而数组只有5的长度,末尾应该是pRead[4],所以这里应该改一下;但我不知道这个指针错误是不是导致debug警告的原因.
一般的指针调试办法:
写个
void M(char * s)
{
AfxMessageBox(s);
}
让可疑的句子前面都加上,M(1),M(2),....追踪程序到哪个句子出现debug警告.
然后全力研究那句代码.
本人觉得debug的知识学的烦琐 ,平常都是这样调试的,于己足够了..
头晕 可能看错.
------解决方案--------------------
for (int n = 0; n <nRead; )
无穷循环?
char *pRead = new char[fr.GetLength()-37336];
是否判断了fr.GetLength()肯定大于37336?
char *pRead = new char[fr.GetLength()-37336];
char pBuf[5] = {0};
char pbuffer[100];
int a=0;//计数
fw.Write( "U-D E-W N-S ",17);
char s[4] = "\r\n " ;
fw.Write(s,2);
if (int nRead = fr.Read(pRead, fr.GetLength()-37336))
{
for (int n = 0; n <nRead; )
{
pbuffer[0]=pRead[n];
pbuffer[1]=pRead[n+1];
sprintf(pBuf, "%02d ",*(short int*)pbuffer);
fw.Write(pBuf, 3);//写第n秒垂直向数据
fw.Write( " ", 4);
......
运行后有如下提示:
Debug Assertion Failed!
Program:C:\Program Files\****\Your.exe
File:filecore.cpp
Line:118
For information on how your program can cause an assertion
failure,see the Visual C++ documentation on asserts.
(Press Retry to debug the application)
终止 重试 忽略
点击忽略后一切正常,别人说是指针的问题,哪个地方错了呢
------解决方案--------------------
nRead 是否超出整数范围(nRead <32768)?
------解决方案--------------------
把 debug 改成 release
试试..
--------
方法:
vc --> build --> set active configuration //我用的是vc6
改dubug 为release
------解决方案--------------------
楼上的误人...
晕.纯粹是掩人耳目.. debug出错,说明程序有问题 改成release 也许掩盖了问题,但万一指针问题在某种输入下带来致命问题呢?
由于代码里不少未定义的变量,本人不是很清楚.粗看没什么问题.
有两个问题是:
1.是你的for确定没有第3表达式?
2.假设数组是5(虽然看你的代码 仿佛数字很大,这里就简单的说)
nRead最大值是5;(即完全输入)
当n是4的时候 符合for的条件;
pRead[n+1];就成了pRead[5]了...而数组只有5的长度,末尾应该是pRead[4],所以这里应该改一下;但我不知道这个指针错误是不是导致debug警告的原因.
一般的指针调试办法:
写个
void M(char * s)
{
AfxMessageBox(s);
}
让可疑的句子前面都加上,M(1),M(2),....追踪程序到哪个句子出现debug警告.
然后全力研究那句代码.
本人觉得debug的知识学的烦琐 ,平常都是这样调试的,于己足够了..
头晕 可能看错.
------解决方案--------------------
for (int n = 0; n <nRead; )
无穷循环?
char *pRead = new char[fr.GetLength()-37336];
是否判断了fr.GetLength()肯定大于37336?