C程序函数运行结束时报内存错误问题,困扰一天了求解。

不冒泡的经纬 2009-04-22 09:35:51
int **AeInt;
double **AeDCT;

AeInt = (int**)malloc( AeHeight * sizeof(int*) );
for(int i = 0;i < AeHeight;i ++)
*( AeInt + i ) = (int*)malloc( 8 );
AeDCT = (double**)malloc( AeHeight * sizeof(double*) );
for(int i = 0;i < AeHeight;i ++)
*( AeDCT + i ) = (double*)malloc( 8 );

void DCT ( int **WaitDCTWavData , double **FinishDCTWavData )
{
double au = 0.0;
double Sum = 0.0;
double cosValue = 0.0;
double TempValue = 0.0;
int u = 0;
for( int column = 0 ; column < AeHeight ; column ++ )
{
for ( u = 0 ; u < 8 ; u ++)
{
Sum = 0.0;
for ( int ii = 0 ; ii < 8 ; ii ++ )
{
if ( u == 0 )
au = sqrt( 1.0 / 8.0 );
else
au = sqrt( 2.0 / 8.0);
cosValue = cos ( ( ( 2.0 * ii + 1.0 ) * u * pi ) / 16.0 );
TempValue = *( *( WaitDCTWavData + column ) + ii ) * cosValue;
Sum = Sum + TempValue;
}
*( *( FinishDCTWavData + column ) + u ) = au * Sum;
}
int jjjjjjj=0;//插入断点Debug,column循环0~255均为正常,但再F5一次就出现内存报错。
}
}

DCT( AeInt , AeDCT );

在函数中插入断点,插入断点Debug,column循环0~255均为正常,但再F5一次就出现内存报错。

请大家帮忙看看是哪儿出的问题。
...全文
167 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
不冒泡的经纬 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hairetz 的回复:]
..楼主,内存错误基本就是越界问题,细心点就好了.
[/Quote]

感谢各位帮助。
liliangbao 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hairetz 的回复:]
..楼主,内存错误基本就是越界问题,细心点就好了.
[/Quote]
Up~
  • 打赏
  • 举报
回复
..楼主,内存错误基本就是越界问题,细心点就好了.
不冒泡的经纬 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 morris88 的回复:]
C/C++ codeint **AeInt;
double **AeDCT;

AeInt = (int**)malloc( AeHeight * sizeof(int*) );
for(int i = 0;i < AeHeight;i ++)
*( AeInt + i ) = (int*)malloc( 8 );
AeDCT = (double**)malloc( AeHeight * sizeof(double*) );
for(int i = 0;i < AeHeight;i ++)
*( AeDCT + i ) = (double*)malloc( 8 );

void DCT ( int **WaitDCTWavData , double **FinishDCTWavData )
{
double au = 0.0;
doubl…
[/Quote]

问题已经解决,确实是越界问题。虽然在此之前也知道应该是这个问题所引起,但脑子中固化着这种分配空间方式是正确的,所以一直不能解决问题。感谢pengzhixi的提醒,稍微修改即解决问题。
不冒泡的经纬 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 baiwei156 的回复:]
而且malloc的空间没有free掉
[/Quote]

有相应Free()函数,不过这里把他给去掉了。感谢这位朋友的提醒。
morris88 2009-04-22
  • 打赏
  • 举报
回复
int **AeInt; 
double **AeDCT;

AeInt = (int**)malloc( AeHeight * sizeof(int*) );
for(int i = 0;i < AeHeight;i ++)
*( AeInt + i ) = (int*)malloc( 8 );
AeDCT = (double**)malloc( AeHeight * sizeof(double*) );
for(int i = 0;i < AeHeight;i ++)
*( AeDCT + i ) = (double*)malloc( 8 );

void DCT ( int **WaitDCTWavData , double **FinishDCTWavData )
{
double au = 0.0;
double Sum = 0.0;
double cosValue = 0.0;
double TempValue = 0.0;
int u = 0;
for( int column = 0 ; column < AeHeight ; column ++ )
{
for ( u = 0 ; u < 8 ; u ++)
{
Sum = 0.0;
for ( int ii = 0 ; ii < 8 ; ii ++ )
{
if ( u == 0 )
au = sqrt( 1.0 / 8.0 );
else
au = sqrt( 2.0 / 8.0);
cosValue = cos ( ( ( 2.0 * ii + 1.0 ) * u * pi ) / 16.0 );
TempValue = *( *( WaitDCTWavData + column ) + ii ) * cosValue; // 貌似FinishDCTWavData有可能越界访问哦...
Sum = Sum + TempValue;
}
*( *( FinishDCTWavData + column ) + u ) = au * Sum; // 貌似FinishDCTWavData有可能越界访问哦...
}
int jjjjjjj=0;//插入断点Debug,column循环0~255均为正常,但再F5一次就出现内存报错。
}
}

DCT( AeInt , AeDCT );


另外后面还需要循环释放前面申请的二维数组内存...
baiwei156 2009-04-22
  • 打赏
  • 举报
回复
而且malloc的空间没有free掉
alan001 2009-04-22
  • 打赏
  • 举报
回复
没必要用双重指针啊
pengzhixi 2009-04-22
  • 打赏
  • 举报
回复
越届访问了*( AeInt + i ) = (int*)malloc( 8*sizeof(int)); *( AeDCT + i ) = (double*)malloc( 8*sizeof(double) );

这样就OK了
pathuang68 2009-04-22
  • 打赏
  • 举报
回复
7楼正解

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧