<分区>
我正在用 C 做类似下面的事情:
void *initialize()
{
my_type *ret = malloc(sizeof(my_type));
return (void*)ret;
}
void test()
{
my_type* ret = (mytype*)initialize();
my_type x = *ret;
}
它在取消引用时崩溃:
Received signal 11 (Segmentation fault: 11)
指针不为空:我尝试打印指针,并得到一个值。
我还尝试在测试函数中创建一个新的 my_type,如下所示:
my_type* new = malloc(sizeof(my_type));
当我打印 new 和 ret 的整数表示时,它们是彼此非常接近的整数。所以这些东西应该在内存附近。
如果编译器不知道一个函数,它会假定 int
作为它的返回类型。
如果 int
的大小与函数实际返回的大小不同,编译器生成的代码可能无法返回正确的字节数。
但是,您发布的代码是正确的,并且会按预期执行,因为 initialise()
发生在使用它之前,因此编译器已经知道函数返回的类型。
很可能原始代码(您没有发布)看起来像这样(没有initialise()
的原型(prototype)):
尝试以下操作:
#include <stdlib.h> /* To pull in malloc's protoype. */
void * initialize(void);
void test()
{
my_type x, * ret = initialize();
if (ret)
x = *ret;
}
void * initialize(void)
{
my_type * ret = malloc(sizeof(*ret));
return ret;
}