C_and_CPP 板


LINE

※ 引述《eagle32 (バスケがしたいです)》之铭言: : 大家好. 我对於电脑记忆体的理解不多. 只是常听说要避免记忆体碎片化. : 所以就学了以下语法要一块连续记忆体去配制一个阵列. 但是当阵列太大时. : 譬如50*50*50 的 double array 执行时就发生segmentaion fault. 请大家指教我哪里做错想错了. 适当地抽象化可以帮助思考/除错, 这时候 typedef 是你的好朋友 一次只思考一个层级, 如果要配置大小为 10一维阵列, 我们可 以这样写: typedef double value_t; typedef value_t* array1d; array1d a1d = (array1d) calloc(10, sizeof(value_t)); 一维阵列的每个元素的型别是 value_t. 如果要配置二维阵列呢? 你可以依样画葫芦: 二维阵列的每个元素型别是一维阵列 typedef array1d* array2d; array2d a2d = (array2d) calloc(10, sizeof(array1d)); 这个概念持续发展下去, 不管是三维、四维还是更多维阵列你都有 办法作出来, 先分享不连续配置的范例如下: https://godbolt.org/z/DHoUSD calloc() 有个问题是: 它是用来配置同样型别的物件. 以你的案 例想把 array1darray2d 不同型别物件放一起的话, 就需要特别 注意指标位移的计算; 不过这边为了简化, 可以先配置好一块 char 阵列, 位址计算就会相对容易, 後面的程式码不需大改: const size_t total_size = l * sizeof(array2d) + (l * m) * sizeof(array1d) + (l * m * n) * sizeof(value_t) ; char *buffer = (char*) calloc(total_size, 1); array3d a3d = (array3d) buffer; array2d a2d = (array2d) (a3d + l); array1d a1d = (array1d) (a2d + l * m); 如果你还是比较喜欢一堆星星(*) 的写法, 可以把前面用 typedef 创出来的 array1darray2d 等型别给取代掉. 最後连续配置的范 例如下: https://godbolt.org/z/01tokn https://godbolt.org/z/Oq8oRX (无 typedef 版) --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.193.76.85
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1543914554.A.A94.html
1F:→ poyenc: 算 a1d 时少加位移, 晚点回家修正 qq 12/04 18:14
2F:推 dzwei: typedef好方法给推 12/04 18:22
※ 编辑: poyenc (123.193.76.85), 12/04/2018 20:03:42
3F:推 eagle32: 谢谢分享. 12/04 22:12
4F:推 ilikekotomi: 没想过这种写法 感谢分享 12/05 01:04
5F:推 friends29: 上色看了好舒服 12/06 09:55







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP