为什么它不会违反分段?

use*_*729 3 c memory stack segmentation-fault

据说下面的代码会导致分段违规:

#include <stdio.h> 
#include <string.h> 

void function(char *str) {
   char buffer[16];

   strcpy(buffer,str);
}

int main() {
  char large_string[256];
  int i;

  for( i = 0; i < 255; i++)
    large_string[i] = 'A';

  function(large_string);
  return 1;
}
Run Code Online (Sandbox Code Playgroud)

它的编译和运行方式如下:

gcc -Wall -Wextra hw.cpp && a.exe
Run Code Online (Sandbox Code Playgroud)

但没有任何结果.

注意

上面的代码确实会覆盖ret地址等等,如果你真的明白它下面会发生什么.

RET地址将0x41414141要具体.

重要 这需要深刻的堆栈知识

Car*_*rum 6

你真的很幸运.代码没有理由产生分段错误(或任何其他类型的错误).不过,这仍然是一个坏主意.你可以通过增加它的大小来使它失败large_string.