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

Popular posts from this blog

php - How to display all orders for a single product showing the most recent first? Woocommerce -

asp.net - How to correctly use QUERY_STRING in ISAPI rewrite? -

angularjs - How restrict admin panel using in backend laravel and admin panel on angular? -