*p = 'a';有问题
char *p = new char(2);
说明P指向字符串
*p = 'a';就错了,应该是*p = “a”;
char *p = new char(2);
说明P指向字符串
*p = 'a';就错了,应该是*p = “a”;
解决方案 »
- opengl 中如何填充一个不规则的区域
- 获取WEBBROWSER滚动位置:莫名其妙的问题,大家帮看看
- FindWindowEx和FindWindow哪不同
- 如何在多线程函数中往View上绘图?
- 两个线程如何同时处理任务, 请各位帮忙看看?
- 这样能防止粘包吗?
- 我不知怎么样才能将所选择的窗口在 任何栏 上的图标也干掉????
- 我现在有2组RADIO,每组3个RADIO控件,怎么使这2组RADIO在同一个对话框里各自管各自选择?
- CButton控件在窗口的Onmousemove下移动时出现连续轨迹,怎么去除这些轨迹?
- 想你好辛苦
- 请教在使用Kodak Image Edit Control中如何将图片缩小显示到一个矩形框中?急!
- Come On , 100 Point Here¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬
char *fun( )
{
char *p = new char(2);
memset(p, '\0', 2);
*p = 'a';
return p;
}
{
char *p = new char(2);
.....................
return p;
}
而不是在栈中,所以函数退出时不会被释放
1. char *p = new char(2);
^^^^^
应该是用[],疑为笔误.
2. 同batizhou(batizhou,不过这可以在函数外部释放,只要调用者
被调用者之间达成一致意见.
3. 由于p[1]不是'\0',所以如果调用者用返回值作为字符串首址的话,
会出现意想不到的错误.
总之这是非常不好的风格.
char *fun( )
{
char *p = new char(2);
if(p != NULL)
memset(p, '\0', 2);
else{
//出错处理,因为没有分配到内存
return NULL;
}
*p = 'a';
return p;
}
这个错大了,编译会失败的
就算是p="a";那么指针的位置改变了
1、...new char(2),它的意思是什么,初始化呢?还是建立数组呢?
2、这个程序段究竟能不能返回正确的值?
3、对于赋值:
*p='a'和*p="a",都是错的。*p = "a" ===> p = "a",赋地址。
*p = 'a' 因为p可能是数组,所以不能赋值
你的看法是对的.我就是这么干的.
不过我的也不错阿.我只是就这个程序说这个程序.
*p='a'当然是对的咯.就是因为p是数组,所以可以这样赋值阿.
new char(2)不代表任何意思,当然是错误的咯.
如果是要让new出来的内存第一个单元是a的话,这个程序的确
返回了这个结果.
{
//这里是不是new char[2]??
char *p = new char(2);
*p = 'a';
//如果是,这里加一句
*(p+1) = 0';
return p;
}
只要在外部别忘delete []p,一切ok.
{
char *p = new char(2);
*p = 'a';
return p;
}这道题并没有什么错误。
> char* p = new char(2)
这一句没错,功能是分配一个字符,并且字符初始化为'\x2',如此而已。
> *p = 'a'
这一句更没有错,它将刚分配的空间用 'a' 来填充。最后返回而已。至于风格不好的问题,那是仁者见仁,智者见智的,而且和应用相关。
不知道哪位在C++编译上或运行中查出什么错误来了呢?
分配完内存后应该检查一下分配内存是否成功,其实就这段程序来说,本身并没有错,只是少了些健壮性!
如果系统没有足够空间而造成new的错误,而后又*p = 'a';
想想看,此时p=NULL, NULL是什么?NULL就是0, 所以p = 0;
*p = 'a'也就是给0地址赋值'a'! 会产生什么后果在windows下我不太清楚,但我知道这肯定是越界访问!
呵呵. 你说得比我还对.一直以为new XX()是new对象用的.
没想到还可以对预设数据类型使用.
> 没程序结构好像没什么问题,但使用时会出差错Ok,请试试以下程序:
int main()
{
for(int i = 0; i < 1000; i++)
{
char* p = func(); //:) 就功能而言,这一句有些象 char* p = new char('a');
std::cout << *p;
delete p;
}}
To: batizhou(batizhou)
例外处理的确不容忽视,但就本题而言,并非错误,而只是程序不够严谨。To: whmouse (飞天酷鼠)
你当时是如何回答的?要知道,就此一题,并不能考出你的什么水平来,而你的应对却是非常重要的,答案的对错常常不是太主要。