c++ - pointer segfault vs undefined behavior -
why code produce segfault when running regularly, undefined behavior instead of segfault if either add command line argument or comment out calling cpy
function?
#include <cstdlib> #include <iostream> #include <cstring> using namespace std; int *p; void fn() { int n[1]; n[0]=99; p = n; } void cpy(char *v) { char x[8]; strncpy(x,v,8); } int main(int argc, char** argv) { fn(); cpy(argv[1]); cout << "p[0]:" << p[0]; }
i know n
local var function fn
, there way can overflow buffer or enter argv[1]
print value n
held wherever is/was in memory?
if don't pass argument, argv[1]==nullptr
. cpy(argv[1])
cpy(nullptr)
, cpy invokes strncpy(x,nullptr,8)
, segfaults.
if comment out cpy, no segfault.
if pass argument, cpy won't segfault. different problem: fn did p=n
n declared on stack, , in main @ cout<<p[0]
, p points @ object n no longer exists, , behavior undefined.
Comments
Post a Comment