【发布时间】:2013-02-18 00:42:32
【问题描述】:
#include <stdio.h>
main()
{
myfunction();
}
void* myfunction() {
char *p;
*p = 0;
return (void*) &p;
}
程序在 Visual Studio 上运行时,无法编译,错误信息如下:
“错误 2 错误 C2040: 'myfunction' : 'void *()' 在间接级别上与 'int ()' 不同”
有人可以简单解释一下吗?
谢谢!
【问题讨论】:
-
虽然这不是您看到的错误,但您知道您的程序会因为您取消引用未初始化的内存位置而给您一个分段错误吗?变量
char* p未初始化,您正在尝试将值0 分配给存储在p中的地址。 -
您的意思是应该是 p=0,而不是 *p=0 吗?因为每个指针在使用前都必须初始化?
-
No
*p = 0是一个有效的语句,但它所做的是将p指向的内存位置分配给0。由于指针p未初始化,它指向的内存将是一些垃圾地址。所以你试图写入一些垃圾地址,这将导致segmentation fault。 -
初始化?比如 p = &something ?因此 p 然后设置为某个地址,而不是垃圾收集?谢谢!
-
是的,完全是
p = &someething或p = malloc(sizeof(char))
标签: c