gpt4 book ai didi

c - 返回 Void 指针截断值

转载 作者:太空宇宙 更新时间:2023-11-04 05:09:39 25 4
gpt4 key购买 nike

我在返回指向另一个 C 函数的 void 指针时遇到问题。

头文件:

void *function2( void );

主程序

#include "myHeader.h"

void function1 (){
void *temp = NULL;
temp = function2();
}

函数2.C

int a = 3;

void *function2(void){
printf("Memory Address %p\n",&a );
return (void *) &a; // value of &a is 0x100023444
}

但是,function1()中temp的值是0x3444,而不是0x100023444。

有没有人知道这个的解决方案,或者如果我做错了什么?

编辑:看来, header 添加在错误的位置,导致下面 AndreyT 和 Jonathan 描述的问题,这似乎已经解决了截断问题。感谢您的帮助!

最佳答案

考虑到问题的修改,我相信问题在于您在使用它之前没有声明 function2() 。因此,编译器认为它返回一个 int,而不是一个 void *。它还应该提示实际定义与假定的声明不匹配。

您应该确保您的编译器选项要求您在使用每个函数之前定义或声明一个完整的原型(prototype)。

请注意,您应该声明 void *function2(void);,因为在参数列表中省略 void 意味着完全不同的事情——这意味着编译器什么都不知道关于它需要什么参数,而不是它没有参数。 (这是与 C++ 的区别。)

您仍然遇到问题,因为您要返回一个指向局部变量的指针。您可能可以打印指针(尽管标准不能保证),但您不能可靠地使用它。

extern void *function2(void);

void function1(void)
{
void *temp = function2();
printf("Address: %p\n", temp);
}

void *function2(void)
{
int a = 3;
printf("Address: %p\n", &a);
return &a; // value of &a is 0x1200001234
}

或者在定义function1()之前定义function2()


请注意,在定义函数的地方(以确保定义与 header 一致)和使用函数的位置(以确保使用与 header 一致)都包含 header 是至关重要的。只要做到这一点,一切都会好起来的。

关于c - 返回 Void 指针截断值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26209366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com