malloced指针在返回时更改值

use*_*119 0 c

我的代码看起来像这样:

Foo* create(args) {
    Foo *t = malloc (sizeof (Foo)) ;
    // Fill up fields in struct t from args. 
    return t;
} 
Run Code Online (Sandbox Code Playgroud)

电话是

Foo *created = create (args) 
Run Code Online (Sandbox Code Playgroud)

请注意,函数和函数调用是两个独立的模块.分配给该指针的值t上是mallocED是什么是在捕获的稍有不同created.似乎地址的MSB已更改并替换为fffff.LSB部分对于大约6-7个字符是相同的.

我不知道发生了什么.我正在使用GCC 4.6

AnT*_*AnT 7

从你提供的内容中可以得出的最可能的解释是,在调用时,函数create未声明的.容许C编译器假定未知功能create返回的int和生成的代码,从而有效地截断该指针值,或者更精确地说,符号扩展的假定int返回值到受体指针的MSB(假设一个平台,指针是宽于int在术语它们的位宽,例如64位平台).

很可能编译器发出了关于调用未声明函数的警告,但用户忽略了该警告.

确保create在通话时可以看到声明(或更好的原型).如果要在C99模式(或更高版本)下进行编译,请要求编译器严格执行C99要求.并且不要忽略编译器诊断消息.