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

Linux下共享内存创建int向量后printf出现格式类型不匹配警告

问题分析与解决

核心错误

你的代码存在两个关键问题:

  1. 变量类型定义错误:int *vectorR[tamR]; 定义的是一个存储int指针的数组,而非你需要的int类型向量。
  2. 数组越界访问:vectorR[tamR] = ... 中,数组下标合法范围是0到tamR-1,tamR已经超出数组索引边界,会触发未定义行为。

修正后的代码

1. 正确创建共享内存指向的int向量

将vectorR定义为单个int指针,直接指向共享内存的起始地址:

int shmidR, tamR;
tamR = fil*col2;
// 定义为int类型指针,而非指针数组
int *vectorR;
shmidR = shmget(IPC_PRIVATE, sizeof(int)*fil*col2, IPC_CREAT|0666);
// 让vectorR指向共享内存的起始位置
vectorR = (int*) shmat(shmidR, NULL, 0);

2. 正确打印向量内容

此时vectorR[i]就是int类型的值,直接用%i格式符打印即可:

for (int i = 0; i < tamR; i++)
{
    printf("%i ", vectorR[i]); // 加空格分隔,方便查看结果
}
printf("\n"); // 打印完成后换行

额外注意事项

  • 使用完共享内存后,需调用shmdt(vectorR)脱离共享内存,再调用shmctl(shmidR, IPC_RMID, NULL)删除共享内存段,避免内存泄漏。
  • 确保fil和col2为合法正整数,防止tamR为0引发异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:40:12