C++内存问题(很多公司面试的题目,值得一看,看懂了别忘了告诉我)<!-- google_ad_section_end -->
void GetMemory(char *p)
{
p=(char*)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str,"helloworld");
printf(str);
}
请问运行Test函数会有什么样的结果?
答:程序崩溃。因为GetMemory并不能传递动态内存,Test函数中的str一直都是NULL。strcpy(str,"helloworld");将使程序崩溃。
char *GetMemory(void)
{
char p[]="helloworld";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
请问运行Test函数会有什么样的结果?
答:可能是乱码。因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是NULL,但其原先的内容已经被清除,新内容不可知。
void GetMemory2(char **p, int num)
{
*p = (char*)malloc(num);
}
void Test(void)
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
请问运行Test函数会有什么样的结果?
答:(1)能够输出hello(2)内存泄漏
以上都是关于内存的问题,我想问第一个为什么说GetMemory不能传递动态内存,而第三个 GetMemory2(char **p, int num)却可以;还有第二个说GetMemory返回的是指向“栈内存”的指针,该指针的地址不是NULL,总之我不懂,最好懂得人能一句一句的解释。
=====================================================================
都是挺简单的题目
void GetMemory(char *p)
{
p=(char*)malloc(100);
}
p参数是复制原有指针的值,而不是原来的指针,所以即使p重新指向新的地址,但原来的指针指向的地址不变。
char *GetMemory(void)
{
char p[]="helloworld";
return p;
}
p是局部变量,在离开作用域后栈空间会被回收,结果不可预料。
void GetMemory(char **p, int num)
{
*p = (char*)malloc(num);
}
p是指向传入的指针的指针,*p为传入的指针赋值,所以改变了传入指针的值,也可以写成这样:
void GetMemory(char *&p)
{
p=(char*)malloc(100);
}
效果一样
=====================================================================
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
分享到:
相关推荐
C++的面试题目 非常好的东西 面试大公司必备
C++ 面试必看 C++ 面试必看C++ 面试必看C++ 面试必看C++ 面试必看C++ 面试必看
C内存管理内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但c,除非放弃C++,转到Java或者.NET,他们的...
内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++...
c++面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试题面试...
主要讲述C++面试中常见的一些常见问题。讲述一些C++关键字的区别,以及一些细节方面的区别,比如delete和delete[]。
c++内存问题,九问九答!!必知必会! "delete p" 会删去 "p" 指针,还是它指到的资料,"*p" ? 该怎麽用 new 来配置多维阵列?
面试题集锦,网上摘抄到一些,自己整理一部分,形成文档。看完面试基本能通过一半。
该文档是我总结的c++笔试面试通常会问的一些问题。另外可以从我的资源目录下找c++数据结构与算法,c++笔试面试基础两部分材料,综合这三个材料一起看,我相信大家一定尽快找到工作。
面试题c++mysql多线程操作系统 面试题c++mysql多线程操作系统 面试题c++mysql多线程操作系统 面试题c++mysql多线程操作系统 面试题c++mysql多线程操作系统
C++面试必问必知 C++面试经典题目(技术面试必问)
秋招和暑期实习的c++面试集锦题目,1)指针是一个实体,需要分配内存空间。引用只是变量的别名,不需要分配内存空间。 2)引用在定义的时候必须进行初始化,并且不能够改变。指针在定义的时候不一定要初始化,并且指向...
C++5年以上资深工程师面试题目以及详细解答。 1 简述C、C++程序编译的内存分配情况 2 谈谈你对拷贝构造函数和赋值运算符的认识 3 用C++设计一个不能被继承的类 4 简述队列和栈的异同 5 深拷贝和浅拷贝的区别是什么 6...
非常有用的c++面试题目 对你绝对有帮助的 做完包你应付笔试面试
c++面试题目c++面试题目c++面试题目c++面试题目
C++历年面试经典题目中包括了最近多年关于C++语言面试的一些经典问题,以及需要注意的事项
一些面试中遇到的题目,希望对找工作的人有帮助。
对于需要面试C++相关岗位的文章,看完这篇文章,如果面试官再问你智能指针,我敢肯定,你一定可以侃侃而谈了~智能指针的面试题,只看这一篇就够了!相信看完这篇文章,妈妈再也不用担心面试官考我智能指针的问题啦...
这是华为最近三年的一些关于c++的面试题目,希望进华为的朋友不可不看。
c++内存对齐的文档(很好的面试题目中常见的资料) c++内存对齐的文档(很好的面试题目中常见的资料)