[英]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;
}
和 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.