You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

伪泛型嵌套数组内存分配出现指针转整数赋值警告的排查

问题分析与解决

首先明确核心问题:代码左右两边的赋值类型完全不匹配,和你猜测的sizeof无关。

先把宏展开后看代码本质(_SINGARR是char*):

(*((char*) _receptive->__m2dimensio + g_curr++)) = (char*) malloc(sizeof(*((char*)(_generic)) * g));

类型不匹配拆解

  • 左边表达式(*((char*) _receptive->__m2dimensio + g_curr++)):
    把_receptive->__m2dimensio转成char*后做指针偏移(偏移g_curr++个char长度),解引用后得到的是单个char值(本质是8位整数)。
  • 右边表达式(char*) malloc(...):
    malloc返回的void*被强转为char*,这是一个指针类型(存储内存地址的变量,通常为32/64位)。

把指针(地址值)直接赋值给char类型变量,编译器自然会报"assignment makes integer from pointer without a cast"——相当于把一个大整数(指针)塞到小整数(char)里,还没加显式转换,因此触发警告。

修复方案

你的需求应该是给伪泛型二维数组的某一行分配内存,也就是让左边的变量存储行指针(char*),需要调整左边的类型:

// 将_receptive->__m2dimensio转为char**类型后再操作
*((char**)_receptive->__m2dimensio + g_curr++) = (char*)malloc(sizeof(char) * g);

这样左边是char**指针偏移后解引用,得到的是char*类型变量,和右边的char*指针类型完全匹配,警告就会消失。

另外补充:你代码里的sizeof计算sizeof(*((_SINGARR)(_generic)) * g)其实是没问题的——*(char*)_generic是char,sizeof(char)为1,最终malloc的字节数就是g,这部分逻辑正确。

内容的提问来源于stack exchange,提问作者deft artisan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 08:18:35