【发布时间】:2015-07-12 01:47:12
【问题描述】:
标题可能令人困惑。假设str 是malloc 分配的指针。 ptr,类型为 int*,被分配给它并被释放,如下面的代码 sn-p 所示:
char* str = malloc(64);
int* ptr = str;
free(ptr);
我试图编译上面的代码。它只是给出一个警告:
source_file.c: In function ‘main’:
source_file.c:10:16: warning: initialization from incompatible pointer type
int* ptr = str;
^
上面的代码会调用未定义的行为吗?
上面的代码sn -p是否释放了malloc为str分配的内存?
【问题讨论】:
-
您使用的是哪个编译器?上面的代码使用 gcc 4.9.2 给出了
error: cannot convert ‘char*’ to ‘int*’ in initialization。 -
在昨天这个问题之后,我也在考虑提出这个问题。感谢您跟进此... :-)
-
@farukdgn ,在 C++ 中使用 g++ 编译时出现该错误。 GCC 似乎可以编译它。我正在使用 GCC 4.8.1。
标签: c pointers memory free undefined-behavior