编译没有错误 但是运行时出现了错误TestQuote.exe 中的 0x00411699 处未处理的异常: 0xC0000005: 写入位置 0x00030f80 时发生访问冲突程序中断后停止在箭头所指向的位置
inline float sqrt(__in float _X)
-> {return ((float)sqrt((double)_X)); }#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;int m = 10;
int n = 5;
int _tmain(int argc, _TCHAR* argv[])
{
int ss1 = m;
int ss2 = n;
short **sp;
sp = new short * [ss1];
for(int j=0;j<ss1;j++)
{
sp[j] = new short [ss2];
}
for(int i = 0;i<ss1;i++)
for(int j = 0;j<ss2;j++)
{
sp[i][j] = i*ss2+j;
sp[i][j] = sqrt((double)sp[i][j]);
cout<<sp[i][j]<<endl; }
for(int i=0;i<ss1;i++)
{
delete [] sp[i];
}
delete sp;
sp = NULL;
return 0;
}
inline float sqrt(__in float _X)
-> {return ((float)sqrt((double)_X)); }#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;int m = 10;
int n = 5;
int _tmain(int argc, _TCHAR* argv[])
{
int ss1 = m;
int ss2 = n;
short **sp;
sp = new short * [ss1];
for(int j=0;j<ss1;j++)
{
sp[j] = new short [ss2];
}
for(int i = 0;i<ss1;i++)
for(int j = 0;j<ss2;j++)
{
sp[i][j] = i*ss2+j;
sp[i][j] = sqrt((double)sp[i][j]);
cout<<sp[i][j]<<endl; }
for(int i=0;i<ss1;i++)
{
delete [] sp[i];
}
delete sp;
sp = NULL;
return 0;
}
解决方案 »
- IO完成端口 如何用WSASend一次发送多个数据包
- CImageList奇怪的问题!!!!!!!
- 数据流和字节可以一起发送吗?
- 请教关于字符串查找与替换的问题
- 问一个CListCtrl控件的滑动条问题
- 请问pDC->DrawText(str,&Rect,nFormat);怎样让文字在矩形的中间(水平和垂直对齐)?谢谢
- 有没有详细介绍各个控件用法和函数的书啊?
- 请问,ftp协议里是怎么保证客户端接收文件完全成功的?
- 谁能我解决这个问题,不胜感谢,200分作酬
- 求助.有人知道FFT的算法吗?
- vc 中在固定的客户区域显示图片,图片超出区域显示滚动条
- 》》socket的recv函数问题:接收方式和flags参数
i在for后i还起作用,
vs2005
i只有在for内才有作用报错就是i的作用域的问题另外
delete sp;要改成delete [] sp;
sp[i][j] = (short)(sqrt((double)sp[i][j]));再看看有没有错?改成一维的算了,看起来直观多了:short *pTemp = new short[m*n];
if(!pTemp)
exit (-1);
for(int i=0;i<m;i++)
sp[i] = (pTemp+i*n);//可能不太对哈:)
这个是因为无限递归造成stack不够用了仔细检查是不是sqrt()是否无限递归了
看你的意思好像是仅仅需要一个返回单精度浮点的平方根,其实你根本没有必要再写一个inline函数,直接
float x = (float)sqrt();强制类型转换就够用。结果这样搞出来个无限递归调用吧栈都弄垮了。
看看你的程序
short **sp;
sp = new short * [ss1];
for(int j=0;j<ss1;j++)
{
sp[j] = new short [ss2];
}
...
sp[i][j] = sqrt((double)sp[i][j]);
费了半天劲搞了个返回单精度浮点的sqrt出来,结果你用的还是short。不觉得不合理么?
这个math.h里面的inline函数不是我写的 只是我的程序在运行的时候会出现堆栈溢出的错误,当我选择中断程序的时候,程序的指针就会自动的定位到下面的函数了
inline float sqrt(__in float _X)
-> {return ((float)sqrt((double)_X)); }
inline float sqrtf(_In_ float _X)
{return ((float)sqrt((double)_X)); }
所以这个 sqrt 是他自己定义的而非 math 里面的.
这样写,一看就可以知道是无限的递归.楼主,你里面的那个sqrt,是想调用cmath里的那个吗?
如果是的话,只要这样写就可以了.
#include <cmath>inline float sqrt(__in float _X)
{
return ::sqrt((double)_X); //加作用域
}
ok~~
1. 确保你工程内部没有定义任何sqrt的宏或者函数
2. 确保你Addition Include Directories没有加你自己的路径在里面,可以和同学比较一下看看是不是有不同光比较一个math.h没有用的,你还要看诸如stdafx.h里有没有什么东西
你是不是在 #include<math.h> 的前面定义 sqrt 的?如果是那样的话,我也试过是无限递归使栈满溢喔.