2006年11月ATI(下属AMD)笔试题及答案(之二)
出自求职百科
点击排行
- Index - (262760)
- 宝洁 - (59910)
- 华为 - (56814)
- 普华永道 - (44292)
- IBM - (41724)
- 中国银行 - (38003)
- 毕马威 - (35291)
- 招商银行 - (32252)
- 富士康 - (32033)
- 强生 - (31932)
最近更新
6:请问下面程序如果运行会出现什么结果?如果有错误请指出并改正。
- include <stdlib.h>
- include <string.h>
class mystring{
public:
mystring(){
m_str=NULL;
}
mystring(mystring& str){
if(m_str!=NULL){
delete []m_str;
}
m_str=new char[strlen(str.m_str)];
strcpy(m_str,str.m_str);
}
mystring & operator=(const char *str){
if(m_str!=NULL){
delete []m_str;
}
m_str=new char[strlen(str)+1];
strcpy(m_str,str);
}
~mystring(){
if(m_str!=NULL){
delete m_str;
}
}
private:
char *m_str;
};
int main(){
mystring str1;
str1="hello world";
mystring str2;
str2=str1;
mystring str3=str2;
return 0;
}
~
答案:
程序运行会出现内存释放错误
错误共有四处,分别在下面改正的代码中标出。
- include <stdlib.h>
- include <string.h>
class mystring{ public: mystring(){ m_str=NULL; } mystring(mystring& str){
/*if(m_str!=NULL){ delete []m_str; }*/
//错误1,因为m_str没有被初始化,所以此处可能为NULL,也可能不为NULL,如果不为null,则会出错,因为m_str是一个随机的值。 m_str=new char[strlen(str.m_str)+1];
//错误2:长度应该+1 strcpy(m_str,str.m_str); }
mystring & operator=(mystring& str){
//错误3:缺少赋值重载函数 if(m_str!=NULL){ delete []m_str; } m_str=new char[strlen(str.m_str)+1];
//错误2:长度应该+1 strcpy(m_str,str.m_str); } mystring & operator=(const char *str){ if(m_str!=NULL){ delete []m_str; } m_str=new char[strlen(str)+1]; strcpy(m_str,str); } ~mystring(){ if(m_str!=NULL){ delete []m_str;
//错误4:析构函数中,应该析构数组 } } private: char *m_str; }; int main(){ mystring str1; str1="hello world"; mystring str2; str2=str1; mystring str3=str2; return 0; } ~
7:100个乒乓球取胜之道,A,B两个人轮流拿,A先拿,一次只能拿[1,5]个,获胜者为拿到最后一个球的人。请问A第一次该拿几个?以后又该怎么拿,才能够确保获胜?
答案:A先拿4个,然后B拿,设B拿x个,则每次A拿6-x个即可。
8:有编号1-50的人,依次排列,然后单号出列,然后剩下的人重新编号,单号出列,依次类推,最后剩下一个人,请问这个人原来编号是多少号?如果是每一次双号出列,请问这个人原来编号是多少?
答案:单号出列:32号
双号出列:1号
