C 动态内存分配不会造成缓冲区溢出?

C 动态内存分配不会造成缓冲区溢出?,c,memory,dynamic,malloc,buffer-overflow,C,Memory,Dynamic,Malloc,Buffer Overflow,我将此代码用于测试目的 char *name; name = (char *) malloc(21); // 20 char + '\0' byte printf("Input your name: "); gets(name); printf("%s\n", name); 如果我理解的话,malloc已经分配了21字节的块内存,我将其转换为一个char指针。 我在测试中输入了一些大长度字符串(超过21个字符),但没有出现缓冲区溢出 我没有掌握的概念是什么?当您将第22个字符写入名称时,就会发

我将此代码用于测试目的

char *name;
name = (char *) malloc(21); // 20 char + '\0' byte
printf("Input your name: ");
gets(name);
printf("%s\n", name);
如果我理解的话,malloc已经分配了21字节的块内存,我将其转换为一个char指针。 我在测试中输入了一些大长度字符串(超过21个字符),但没有出现缓冲区溢出



我没有掌握的概念是什么?

当您将第22个字符写入
名称时,就会发生缓冲区溢出。该字符存储在为
name
分配的存储之外的内存位置。溢出缓冲区的效果是未定义的行为,这种行为有一种不做任何事情的坏习惯,特别是在一个简单的应用程序中。

一旦将第22个字符写入
name
,缓冲区就会溢出。该字符存储在为
name
分配的存储之外的内存位置。溢出缓冲区的效果是未定义的行为,这种行为有一种不做任何事情的坏习惯,特别是在一个简单的应用程序中。

一旦将第22个字符写入
name
,缓冲区就会溢出。该字符存储在为
name
分配的存储之外的内存位置。溢出缓冲区的效果是未定义的行为,这种行为有一种不做任何事情的坏习惯,特别是在一个简单的应用程序中。

一旦将第22个字符写入
name
,缓冲区就会溢出。该字符存储在为
name
分配的存储之外的内存位置。缓冲区溢出的影响是未定义的行为,这种行为有一种不做任何事情的坏习惯,特别是在一个简单的应用程序中。

事实上,你肯定有过。这个概念就是未定义的行为。程序不必报告任何类型的错误。它可以做任何它想做的事情。您不需要强制转换
malloc()
的返回值,使其成为
char
指针,
void*
被转换为任何不带强制转换的指针类型。@0vid谁告诉过你缓冲区溢出在任何情况下都会导致分段错误?当操作系统检测到程序被分配的访问时,会发生分段错误。然而,动态内存经常分配的内存超过您为适应固定页面大小而要求的内存,因此您占用的内存是您自己的:没有SEGFULT。事实上,您当然有。这个概念是未定义的行为。程序不必报告任何类型的错误。它可以做任何它想做的事情。您不需要强制转换
malloc()
的返回值,使其成为
char
指针,
void*
被转换为任何不带强制转换的指针类型。@0vid谁告诉过你缓冲区溢出在任何情况下都会导致分段错误?当操作系统检测到程序被分配的访问时,会发生分段错误。然而,动态内存经常分配的内存超过您为适应固定页面大小而要求的内存,因此您占用的内存是您自己的:没有SEGFULT。事实上,您当然有。这个概念是未定义的行为。程序不必报告任何类型的错误。它可以做任何它想做的事情。您不需要强制转换
malloc()
的返回值,使其成为
char
指针,
void*
被转换为任何不带强制转换的指针类型。@0vid谁告诉过你缓冲区溢出在任何情况下都会导致分段错误?当操作系统检测到程序被分配的访问时,会发生分段错误。然而,动态内存经常分配的内存超过您为适应固定页面大小而要求的内存,因此您占用的内存是您自己的:没有SEGFULT。事实上,您当然有。这个概念是未定义的行为。程序不必报告任何类型的错误。它可以做任何它想做的事情。您不需要强制转换
malloc()
的返回值,使其成为
char
指针,
void*
被转换为任何不带强制转换的指针类型。@0vid谁告诉过你缓冲区溢出在任何情况下都会导致分段错误?当操作系统检测到程序被分配的访问时,会发生分段错误。但是,动态内存经常会分配比您要求的更多的内存以适应固定的页面大小,因此您占用的内存是您的:no segfault。很抱歉,我的计算机不知道,但发生这种未定义的行为是因为我没有在主函数中声明任何其他变量,所以它不会占用假定的其他变量内存?或者缓冲区溢出发生,并且在运行程序时不会提示任何内容?很抱歉,我的计算机不知道,但发生这种未定义的行为是因为我没有在主函数中声明任何其他变量,所以它不会占用假定的其他变量内存?或者缓冲区溢出发生,并且在运行程序时不会提示任何内容?很抱歉,我的计算机不知道,但发生这种未定义的行为是因为我没有在主函数中声明任何其他变量,所以它不会占用假定的其他变量内存?或者缓冲区溢出发生,并且在运行程序时不会提示任何内容?很抱歉,我的计算机不知道,但发生这种未定义的行为是因为我没有在主函数中声明任何其他变量,所以它不会占用假定的其他变量内存?或者发生缓冲区溢出,当运行程序时不会提示任何内容?