[vl@home tmp]$ cat test.c #include #include void dump(char **foo); int main() { char bar[16]; dump(&bar); printf("bar: %s\n", bar); return 0; } void dump(char **foo) { strncpy(*foo, "bogus", 5); } [vl@home tmp]$ gcc -Wall -o test test.c && ./test test.c: In function ‘main’: test.c:6: warning: passing argument 1 of ‘dump’ from incompatible pointer type Segmentation fault ---- same with memory allocation ---- $ gcc -Wall -o test test.c && ./test bar: bogus [vl@home tmp]$ cat test.c #include #include #include void dump(char **foo); int main() { char *bar = malloc(16); dump(&bar); printf("bar: %s\n", bar); free(bar); return 0; } void dump(char **foo) { strncpy(*foo, "bogus", 5); } [vl@home tmp]$ gcc -Wall -o test test.c && ./test bar: bogus