繁体   English   中英

指向 integer 的空指针

[英]Void pointer to integer

我有一个名为 printNums 的方法,我想在其中打印 1 - 10 的整数。对于我的分配,我应该将 malloc 设置为一个 int 指针,将其作为 void* 点传入我的 function 并在 function 内部,转换它,尊重它并在计数器的每次迭代之前打印出 integer。

但是,我在*((int*)ptr)之后一直遇到分段错误,我不太确定为什么。 任何帮助,将不胜感激。

这是我的代码:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

void* printNums(void *ptr);

int main(int argc, char **argv)
{

  int *ptr = (int*)malloc(sizeof(int));
  ptr = 0;
  printNums(ptr);

  return 0;

}

void* printNums(void *ptr){

  int i = 0;

  for (i = 0; i <= 10; i++){

    *((int*)ptr) = i; 

    printf("%d\n", *((int*)ptr));

  } 

}

您正在将 ptr 指针分配给零。 改变ptr = 0; *ptr = 0; .

您正在将地址重置为零:

ptr = 0;

这意味着如果您尝试访问它,您肯定会(在大多数环境和操作系统中)遇到分段错误。

我认为你想在使用之前将ptr指向的值设置为0 ,所以错误地设置了ptr = 0

要使ptr指向的所有值都为0 ,您需要使用memset

memset(ptr,0,sizeof(int));

但是,我在*((int*)ptr)之后一直遇到分段错误,我不太确定为什么。

你可以试着自己去了解一下。 编程需要一些调试技巧——论坛不是替代品。

void* printNums(void *ptr){

  int i = 0;

  for (i = 0; i <= 10; i++){

    printf("%p\n", ptr);
    //*((int*)ptr) = i; 
    //printf("%d\n", *((int*)ptr));
  } 
  return ptr;
}

https://godbolt.org/z/EYhGKn

和 output

(nil)
(nil)
(nil)
(nil)
(nil)
(nil)
(nil)
(nil)
(nil)
(nil)
(nil)

答案很明显:您取消引用 NULL 指针。

现在您可以尝试找出将 NULL 指针传递给 function 的原因。由于该程序有 12 行长,因此查找该行不会花费太多时间:

ptr = 0;

它将 integer 零分配给指针。 所以指针现在是 NULL。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM