Tag: 悬空指针

为什么我的悬空指针不会导致分段错误?

我的代码: #include #include int main(void) { int *p = (int *)malloc(sizeof(int)); free(p); *p = 42; return 0; } 我创建了一个指针,然后我将它指向分配的空间,最后我给它分配了42。 在我看来它不应该工作,它应该导致分段错误,但它的工作原理。 所以为什么? PS:我通常在Linux上用Gcc编译它

在这种情况下,了解悬空指针行为

我有一个指针,默认情况下它携带NULL然后它等待一些事件并在事件发生时获取一个值,稍后我释放指针在其他地方,但即使在释放指针后我没有使它为NULL所以它仍然保持引用相同的内存位置 ,我知道下一个malloc调用可能会将该内存块分配给其他内存请求! pointer_type *p = NULL; while (process_get_wakeup(//some logic//)) { while ((qelem = (void*)process_dequeue(//some logic//)) != NULL) { p = (pointer_type *)qelem; } . . //goes into a loop of calls where free(p) is also done! . . //Printing value of p as %p gives this : 0xFF00000000 编辑: 我已经知道它不是我们应该如何做到的 ,我不能指望保留与现在可能用于其他东西的值相同的值,但我想知道的是为什么只有p的特定值我看到了! 这个值: 0xFF00000000是否有任何特殊含义?

C中的悬空指针

我在C中编写了一个悬挂指针的程序。 #include int *func(void) { int num; num = 100; return # } int func1(void) { int x,y,z; scanf(“%d %d”,&y,&z); x=y+z; return x; } int main(void) { int *a = func(); int b; b = func1(); printf(“%d\n”,*a); return 0; } 即使指针悬空,我也将输出设为100 。 我在上面的函数func1()做了一个更改。 现在我在编译时分配值,而不是像上面的程序那样从标准输入中获取y和z的值。 我重新定义了func1() ,如下所示: int func1(void) { int x,y,z; y=100; z=100; x=y+z; return […]

realloc()悬空指针和未定义的行为

当你释放内存时,指向内存的指针会发生什么? 他们立即变得无效吗? 如果他们以后再次有效会怎么样? 当然,指针变为无效然后再次变为“有效”的通常情况是将某些其他对象分配到之前使用的内存,如果使用指针访问内存,那显然是未定义的行为。 悬空指针内存覆盖了第1课,差不多。 但是,如果内存再次对同一分配有效,该怎么办? 只有一种标准方式可以实现: realloc() 。 如果你有一个指向malloc() ‘内存块中偏移量> 1某个位置的指针,那么使用realloc()将块缩小到小于你的偏移量,显然你的指针变得无效。 如果你再使用realloc()再次将块增长回至至少覆盖悬空指针指向的对象类型,并且在任何情况下都没有realloc()移动内存块,悬空指针是否再次有效? 这是一个极端的案例,我真的不知道如何解释C或C ++标准来解决它。 以下是显示它的程序。 #include #include #include int main(void) { static const char s_message[] = “hello there”; static const char s_kitty[] = “kitty”; char *string = malloc(sizeof(s_message)); if (!string) { fprintf(stderr, “malloc failed\n”); return 1; } memcpy(string, s_message, sizeof(s_message)); printf(“%p %s\n”, string, string); […]