合适的堆栈大小问题。
//---------------------------------------------------------------------------
#include <conio.h>
#include <iostream.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
char *buffer;
int column,row;
gotoxy(10,10);
cout<<"This is just an example!\n";
gotoxy(10,11);
cout<<"Width=24\n";
gotoxy(10,12);
cout<<"Hight=3\n";
column=25;
row=3;
buffer=new char[column*row*4]; //改成2不行,因为堆栈设太小。
gettext(10,10,10+column,10+row,buffer);
puttext(50,20,50+column,20+row,buffer);
delete buffer;
getch();
return 0;
}
//------------------------------------------------------------------------
以上程序中有注释的那行若改成
buffer=new char[column*row*2];
在程序正常关闭是会出现非法读写错误。
根据专家提示可能是堆栈设置太小,改成×4果然OK!
可是我不明白×2为什么不够大?
问题点数:10、回复次数:5Top
1 楼jishiping(JSP 季世平)回复于 2002-08-03 20:44:39 得分 5
因为使用gettext时,包含起始点的坐标,所以你这儿的控件大小应该是:
(column+1)*(row+1)*2,用column*row*2就小了,用column*row*4就大了。
当然了,大了不会造成程序错误,小了会造成错误。Top
2 楼dislimit(风飘雪影)回复于 2002-08-04 11:07:17 得分 0
多谢指教!
不过恕我无知,算面积得話(column+1)*(row+1)就够了。
为什么还要×2呢?Top
3 楼jishiping(JSP 季世平)回复于 2002-08-04 15:21:35 得分 5
帮助里有说明。每个字符需要2个字节来存放,第一个字节存放字符,第二个
字节存放显示的属性(如字符颜色,是否高亮度,字符是否闪烁等)。Top
4 楼dislimit(风飘雪影)回复于 2002-08-04 21:23:25 得分 0
那么什么情况下需要2字节存放,什么时候只要1字节呢?Top
5 楼jishiping(JSP 季世平)回复于 2002-08-04 23:04:07 得分 0
上面不是说的很清楚了,使用gettext 和 puttext 时,由于除了字符本身之
外,还需要字符的显示属性,所以每个字符需要2个字节。在Windows下,有时
需要2个字节,有时需要1个字节。这要视具体情况而定。Top




