C中的每个指针都应该分配在堆上吗?
Should every pointer in C be allocated on the heap?
是否要求或建议在堆上分配 C 中的每个指针?例如,以下代码是否可能产生分段错误?
#include <stdio.h>
int main(void) {
int* p;
*p = 16;
printf("Pointer p = %d\n", *p);
return 0;
}
此代码可能会出现段错误,因为 p
未初始化,因此未指向有效地址。
指针不一定必须指向堆内存。它只需要指向一个有效的对象。例如:
int x = 4;
int *p = &x;
*p = 5;
printf("x=%d\n", x); // prints 5
不必分配。您只需要确保它指向有效的内存地址,您在示例中没有指向该地址。
由于您没有初始化指针,它有一些随机值,尝试取消引用它会将此值解释为内存地址,这可能会给您带来分段错误。
您可以改为执行以下操作:
int x; // not initialized, random value in memory
int *p = &x;
*p = 16; //now you are accessing a valid address (x's)
是否要求或建议在堆上分配 C 中的每个指针?例如,以下代码是否可能产生分段错误?
#include <stdio.h>
int main(void) {
int* p;
*p = 16;
printf("Pointer p = %d\n", *p);
return 0;
}
此代码可能会出现段错误,因为 p
未初始化,因此未指向有效地址。
指针不一定必须指向堆内存。它只需要指向一个有效的对象。例如:
int x = 4;
int *p = &x;
*p = 5;
printf("x=%d\n", x); // prints 5
不必分配。您只需要确保它指向有效的内存地址,您在示例中没有指向该地址。
由于您没有初始化指针,它有一些随机值,尝试取消引用它会将此值解释为内存地址,这可能会给您带来分段错误。
您可以改为执行以下操作:
int x; // not initialized, random value in memory
int *p = &x;
*p = 16; //now you are accessing a valid address (x's)