将返回值强制转换为指针时,c中的内存分配

Junbang Huang

在c中,当定义类似的变量时int a; int* b;,将在堆栈中分配内存。使用malloc时,将使用堆内存。

我的问题是,是否在以下函数中:

void* function () {
int counter = 0;
while() {
   ... does some counting
   counter++;
}
return (void *) counter;
}

它正在返回一个指向计数器的指针,计数器的内存在哪里?代码段?

甲肾上腺素

它没有返回的指针counter那将是&counter,这是指向局部变量的指针。这样做将是一个错误,因为一旦函数返回,局部变量就会被销毁,因此调用者将得到一个指向不再存在的对象的指针。

在实践中,counter可能存在于堆栈中或一个寄存器(或多个寄存器)中。该代码段通常是只读的,因此变量不能存在于此。

(void *)counter正在将数字转换为指针值。该操作的结果是实现定义的。

例如,使用gcc

如果指针表示形式小于整数类型,则从整数到指针的转换将丢弃最高有效位,如果指针表示形式大于整数类型,则将根据整数类型的有符号性进行扩展,否则这些位不变。

结果地址可能根本不是有效的指针值,或者它可能指向未映射的页面。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将内存分配返回值转换为 TYPE 数组

C - 将函数调用返回值强制转换为 void

将指针强制转换为从C中的int函数返回的int是否安全?

在perl中,将子例程的返回值分配给变量时,数据是否在内存中重复?

将字符转换为整数并返回值的函数 [C]

为什么在将值打印到地址位于指针中的内存中之前,必须将void指针强制转换为int或其他内容?

当我使用void函数的返回值(通过强制转换函数指针)时,会发生什么?

在强制转换为void *之后返回时如何删除指针

在C ++ 11中的循环中为函数的返回值分配内存:如何优化?

每当我尝试将字符串强制转换为PySpark中的DecimalType时,都会返回Null值

强制转换为右值引用以“强制”返回值的移动-澄清

Python SWIG:将C ++返回参数转换为返回值,并将原始C ++类型转换为Python类型

将类型强制转换为结构指针时出错

如何在C ++ 17中将强制转换函数指针静态转换为noexcept?

C中的指针:带值分配的内存分配VS不带值分配的内存分配

将返回值转换为模板化类型

将php函数返回值转换为true / false

如何将列表转换为多个返回值?

将返回值转换为特定类型

Java反射。将返回值转换为双精度

将“ gzencode()”的返回值转换为UTF-8

将返回对象指针的函数强制转换为返回空指针的函数合法吗?

当int值在C中保证小于256时,将int指针转换为char指针

如何将枚举返回值转换为C ++异常?

不兼容的指针类型和返回值使整数无强制转换问题

在C中,将int强制转换为struct *会在内存中发生什么?

强制转换返回强制类型的函数的返回值

如何在C中强制使用返回值

为什么在C ++中可以将一个类的指针强制转换为另一类的指针?