1.
void GetMemory(char *p)
{
p = (char *)malloc(100);
}
void Test(void)
{
char *str = NULL;
GetMemory(str);
strcpy(str, "hello world");
printf(str);
}
请问运行Test函数会有什么样的结果?
答:程序崩溃。
因为GetMemory并不能传递动态内存,
Test函数中的 str一直都是 NULL。
strcpy(str, "hello world");将使程序崩溃。
2.
char *GetMemory(void)
{
char p[] = "hello world";
return p;
}
void Test(void)
{
char *str = NULL;
str = GetMemory();
printf(str);
}
请问运行Test函数会有什么样的结果?
答:可能是乱码。
因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知。
3.
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)内存泄漏
4.
void Test(void)
{
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);
if(str != NULL)
{
strcpy(str, “world”);
printf(str);
}
}
请问运行Test函数会有什么样的结果?
答:篡改动态内存区的内容,后果难以预料,非常危险。
因为free(str);之后,str成为野指针,
if(str != NULL)语句不起作用。
分享到:
相关推荐
《C++ 内存管理算法和实现》是一本深入探讨C++内存管理的权威著作,对于程序员来说,理解和掌握内存管理是提升编程技能的关键。内存管理不仅涉及到程序的效率,也直接影响到程序的稳定性和安全性。本文将围绕该书的...
《C++内存管理技术内幕【电子书】》深入探讨了C++编程语言中内存管理的核心技术和方法。在C++编程中,内存管理是一个基础而复杂的话题,尤其是内存泄露问题,长期困扰着许多程序员。本书的目的是帮助开发者理解和...
总的来说,C++内存管理是一个深奥的话题,涵盖了许多底层细节和高级技术。理解和掌握这些知识对于编写高效、健壮的C++代码至关重要。通过深入学习,我们可以更好地利用内存,减少错误,提升程序性能。
C++内存管理技术内幕涵盖了这一语言的核心机制之一。C++语言的内存管理之所以复杂,是因为它提供了自由分配和释放内存的能力,使得开发者可以精确控制程序的内存使用,但同时也增加了出错的可能性。以下是对上述文档...
《深入理解内存——C++内存管理》 C++内存管理是开发者必须面对的挑战,它既带来了灵活性,也带来了困扰。对于新手来说,这可能是学习曲线最陡峭的部分,但理解内存管理是成为C++专家的必经之路。在Java或.NET等...
以下是对C++内存管理的一些核心知识点的详细解释: 1. **内存区域** - **栈区**:由编译器自动分配和回收,用于存储局部变量、函数参数等。栈空间有限,一般为几MB,过大的数据会导致栈溢出。 - **堆区**:程序员...
一个有关C++内存管理的经典之作。
总的来说,这个压缩包提供的资料对于想要深入理解C和C++内存管理、提高程序健壮性的开发者来说是一份宝贵的资源。通过学习这些材料,你可以更好地掌握内存管理的原则,预防和解决内存泄漏,以及有效地进行内存调试和...
C++内存管理是编程领域中的一个关键话题,尤其对于C++开发者来说,它既是挑战,也是机遇。内存管理是C++复杂性和灵活性的核心,既能让经验丰富的程序员获得高性能和自由,也可能让初学者陷入无尽的调试困扰。由于C++...
下面将详细讨论C++内存管理中的关键知识点,以及如何防止内存泄漏。 首先,理解C++中的内存类型是至关重要的。C++内存分为三种主要区域:栈(Stack)、堆(Heap)和静态存储区(Static Storage)。栈内存用于存储...
《C++内存管理算法和实现》是一本深入探讨C++内存管理机制的宝贵资源,它主要涵盖了以下几个核心知识点: 1. **动态内存分配与释放**:在C++中,我们有`new`和`delete`操作符用于动态分配和释放内存。`new`运算符在...