百思不解的问题,高分求救!!!
我写的以下程序
BOOL DataStore(unsigned char *buf, long size)
{
pbuf=(unsigned char *)malloc(size);
//for(long i=0;i<size;i++)pbuf[i]=buf[i];
memcpy(pbuf,buf,size);
return TRUE;
}
BOOL BrightAjust(unsigned char *buf, long size, int vB)
{
if(pbuf==NULL)DataStore(buf,size);
for(long i=0;i<size;i++)
{
if(buf[i]+vB>255)buf[i]=255;
else if(buf[i]+vB<0)buf[i]=0;
}
return TRUE;
}
运行时弹出错误,Error: expression cannot be evaluated
why???????????????????????????
问题点数:100、回复次数:10Top
1 楼ldcr(龙的传人)回复于 2005-06-03 12:37:42 得分 0
pbuf是全局变量
并且初始pbuf=NULL;Top
2 楼mccxj(老鼠不逛街)回复于 2005-06-03 12:54:46 得分 0
BOOL BrightAjust(unsigned char *buf, long size, int vB)
if(pbuf==NULL)DataStore(buf,size);//这里有问题?
buf。。没分配?Top
3 楼Cuiql(向前冲,向后看)回复于 2005-06-03 13:00:18 得分 0
buf。。没分配Top
4 楼ldcr(龙的传人)回复于 2005-06-03 13:05:37 得分 0
是那里有问题,不过把改成if(pbuf==NULL)AfxMessageBox("xx");
同样是这里出错
Top
5 楼ldcr(龙的传人)回复于 2005-06-03 13:10:11 得分 0
前面是这样的
......
unsigned char * buf;
buf=(unsigned char *)malloc(size);
.....//对buf附值
BrightAjust(buf,size,3);
if(buf!=NULL)free(buf);
......Top
6 楼guyaguya(我只愿面朝大海,春暖花开)回复于 2005-06-03 13:13:14 得分 0
BOOL DataStore(unsigned char *buf, long size)
{
// 断点1 pbuf=(unsigned char *)malloc(size);
//for(long i=0;i<size;i++)pbuf[i]=buf[i];
memcpy(pbuf,buf,size);
return TRUE;
}
BOOL BrightAjust(unsigned char *buf, long size, int vB)
{
// 断点2 if(pbuf==NULL)DataStore(buf,size);
for(long i=0;i<size;i++)
{
if(buf[i]+vB>255)buf[i]=255;
else if(buf[i]+vB<0)buf[i]=0;
}
return TRUE;
}
在我标断点的两个地方设两个断点调试一下Top
7 楼qfeng_zhao(鱼儿鱼儿满天飞)回复于 2005-06-03 13:18:10 得分 100
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
typedef int BOOL;
#define TRUE 1;
unsigned char *pbuf;
const int bufferSize = 100;
BOOL DataStore(unsigned char *buf, long size)
{
pbuf=(unsigned char *)malloc(size);
//for(long i=0;i<size;i++)pbuf[i]=buf[i];
memcpy(pbuf,buf,size);
return TRUE;
}
BOOL BrightAjust(unsigned char *buf, long size, int vB)
{
if(pbuf==NULL){
DataStore(buf,size);
}
for(long i=0;i<size;i++)
{
if(buf[i]+vB>255)buf[i]=255;
else if(buf[i]+vB<0)buf[i]=0;
}
return TRUE;
}
int main()
{
unsigned char buf[bufferSize];
int i;
for(i=0; i<bufferSize; i++)
{
buf[i] = i*2;
}
BrightAjust(buf,bufferSize,-10);
for(i=0; i<bufferSize; i++){
printf("%d ", buf[i]);
if((i+1)%10==0){
printf("\n");
}
}
return 0;
}
如果buf在分配的话,没什么问题的,vc6+xp下调试通过Top
8 楼ldcr(龙的传人)回复于 2005-06-03 13:25:11 得分 0
试过了,提示
+ pbuf CXX0030: Error: expression cannot be evaluated unsigned char *
如果这样
BOOL DataStore(unsigned char *buf, long size)
{
pbuf=(unsigned char *)malloc(size);
//for(long i=0;i<size;i++)pbuf[i]=buf[i];
memcpy(pbuf,buf,size);
return TRUE;
}
BOOL BrightAjust(unsigned char *buf, long size, int vB)
{
// 断点2 if(pbuf==NULL)DataStore(buf,size);若屏蔽这一行就可以通过
//换成 if(pbuf==NULL)vB++;都会出错,不解!!!
for(long i=0;i<size;i++)
{
if(buf[i]+vB>255)buf[i]=255;
else if(buf[i]+vB<0)buf[i]=0;
}
return TRUE;
}
Top
9 楼mostideal(三甲)回复于 2005-06-03 13:40:08 得分 0
我没时间试,,帮你顶了。。Top
10 楼ldcr(龙的传人)回复于 2005-06-03 14:01:54 得分 0
据qfeng_zhao(一天到晚游泳的鱼),看来这段程序是没问题。是其它的问题吧
原程序是:
BOOL ImagePro::DataStore(unsigned char *buf, long size)
{
pbuf=(unsigned char *)malloc(size);
memcpy(pbuf,buf,size);
return TRUE;
}
BOOL ImagePro::BrightAjust(unsigned char *buf, long size, int vB)
{
if(pbuf==NULL)DataStore(buf,size);
for(long i=0;i<size;i++)
{
if(buf[i]+vB>255)buf[i]=255;
else if(buf[i]+vB<0)buf[i]=0;
}
return TRUE;
}
void Adjust::OnCustomdrawBright(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
int ii=m_Bright.GetPos();
if(m_hsi.i!=ii)
{
s.Format("%d",ii);
GetDlgItem(IDC_Br)->SetWindowText(s);
m_hsi.i=ii;
if(apDoc!=NULL)
{
unsigned char * pbuf=(unsigned char *)malloc(size); apDoc->m_pDIB->Data2Buf(pbuf);
datapro->BrightAjust(pbuf,size,ii);
if(apDoc->m_pDIB->Buf2Data(pbuf))//改变原图像
theApp.pView->OnDraw(theApp.pView->GetDC());//更新视图
if(pbuf!=NULL)free(pbuf);
}
}
}Top




