#include <stdio.h>
void create_string(char ***q) { char *name [] =
{"Neal", "R.", "Wagner", NULL}; *q = name; }
void mess_up() { /* stack */ int a[20]; int i; for (i = 0; i < 20; i++) a[i]= i; }
void print_string(char **p) { while (*p) printf("%s ", *(p++)); printf("
"); }
int main() { char **p; create_string(&p); print_string(p); mess_up(); print_string(p); }
|
#include <stdio.h>
void create_string(char ***q) { char **name = (char **) malloc(sizeof(char *)*4); *name = "Neal"; *(name+1) = "R."; *(name+2) = "Wagner"; *(name+3) = NULL; *q = name; }
void mess_up() { int a[20]; int i; for (i = 0; i < 20; i++) a[i]= i; }
void print_string(char **p) { while (*p) printf("%s ", *(p++)); printf("
"); }
int main() { char **p; create_string(&p); print_string(p); mess_up(); print_string(p); }
|
#include <stdio.h>
void create_string(char **q) { *q = "Neal"; *(q+1) = "R."; *(q+2) = "Wagner"; *(q+3) = NULL; }
void mess_up() { int a[20]; int i; for (i = 0; i < 20; i++) a[i]= i; }
void print_string(char **p) { while (*p) printf("%s ", *(p++)); printf("
"); }
int main() { char **p = (char **) malloc(sizeof(char *)*4); create_string(p); print_string(p); mess_up(); print_string(p); }
|
% cc -o param_wrong param_wrong.c
% param_wrong
Neal R. Wagner
Segmentation fault
|
% cc -o param param.c
% param
Neal R. Wagner
Neal R. Wagner
|
% cc -o param2 param2.c
% param2
Neal R. Wagner
Neal R. Wagner
|