如果有人在 *a 中向您传递了一个垃圾指针,则无法检查(无论如何都与平台无关)是否可以访问该指针。
但是,如果有人传递 a==NULL 或 *a==NULL 你至少可以检查一下(埃里克在他对另一个答案的评论中首先提到了这一点):
void func_foo(int **a)
{
int *b= NULL, c;
if (a!=NULL) {
b = *a;
}
if (b!=NULL) {
printf("about to access memory at address 0x%p\n", b);
memcpy(&c, b, sizeof(int));//this crashes because address "b" is not accessible.
// btw same as c= *b or c= **a;
}
else {
printf("someone passed us a null pointer either in a or *a\n");
}
}
只是为了好玩,一个简化的版本是:
void func_foo(int **a)
{
int c;
if (a!=NULL && *a!=NULL) {
c = **a;
}
else {
printf("someone passed us a null pointer either in a or *a\n");
}
}