首页 > 解决方案 > C中的每个指针都应该分配在堆上吗?

问题描述

是否需要或建议将 C 中的每个指针都分配在堆上?例如,以下代码是否可能会产生分段错误?

#include <stdio.h>

int main(void) {
    int* p;
    *p = 16;

    printf("Pointer p = %d\n", *p);
    return 0;
}

标签: cpointersheap-memory

解决方案


此代码可能会出现段错误,因为p未初始化,因此未指向有效地址。

指针不一定必须指向堆内存。它只需要指向一个有效的对象。例如:

int x = 4;
int *p = &x;
*p = 5;
printf("x=%d\n", x);  // prints 5 

推荐阅读