作者allencheng (Allen Cheng)
看板C_and_CPP
标题[问题] 询问 C 语言的问题 & 学习资源请教
时间Sun Jan 1 13:46:07 2023
开发平台(Platform): Mac
编译器: GCC
额外使用到的函数库(Library Used): uthash
问题(Question):
完整资讯请至
https://hackmd.io/@allencheng/rygXSYiTq
小弟在自学 C 语言,并尝试用 C 来解 leetcode 题目
在 refactor test code 的时候,编译没问题,但执行时发生
segmentation fault
source:
// origin
numsSize = 4;
int *nums1;
nums1 = (int *) malloc(numsSize * sizeof(int));
nums1[0] = 2;
nums1[1] = 7;
nums1[2] = 11;
nums1[3] = 15;
// refactor
numsSize = 4;
int *nums1;
nums1 = (int *) malloc(numsSize * sizeof(int));
int data[] = {2, 7, 11, 15}; // 这行出错
for (size_t i = 0;i < numsSize;i++)
nums1[i] = data[1];
检查後发现是宣告 int array 的时候执行错误
有尝试寻找问题的原因,但可能是观念不足或不知道关键字
找不到可以解释的地方
所以才来这询问是什麽原因造成错误?
--
另外再请教,我是用网路上的资源跟书局翻书自学 C 语言
找不到同伴跟前辈,所以有点瞎子摸象
不晓得我目前这样写的方式,符不符合一般 C 语言开发的惯例或风格?
目前找到的学习资源大都只是教语法或基础观念,
jserv 的「你所不知道的 C 语言」对经验薄弱的我来说来有点艰涩,消化不良
想知道有没有比较实务运用学习资源或教材?
例如手把手地的实做出一个 C 语言的软体 / 实用的 lib 操作
目前已学完 Havard CS50, 作业有做完
CMU 15-213(CS:APP) 缓步持续努力中,但教材很「底层」,实务经验不够也很痛苦 XD
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 101.9.49.120 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1672551970.A.87A.html
1F:→ stucode: 问题应该是出在没有初始化 returnSize 01/01 14:17
2F:→ nh60211as: 一楼说的没初始化 01/01 14:46
5F:→ Richun: gcc先加个flag -Wall 把所有的warning都开出来 01/01 15:44
6F:→ Richun: 你的returnSize是一个简单的int能处理的事,在main里面只 01/01 15:47
7F:→ Richun: 需要初始化 size_t returnSize = 0; 或把size_t换成int 01/01 15:48
8F:→ Richun: 在call function传参数时加上&,&returnSize传址进去。 01/01 15:50
9F:→ allencheng: 您好,已补上初始化,但是变成编译过,执行错误 Orz 01/01 15:58
10F:→ allencheng: 有把讯息补在 hackMD link 上,请参照,谢谢 01/01 15:58
11F:推 Schottky: ......请问returnSize做什麽用途,初始化为NULL是对的吗 01/01 16:01
12F:→ nh60211as: 初始化是要malloc,你的twoSum里面是直接assign value 01/01 16:03
13F:→ nh60211as: ,如果returnSize是NULL,当然会直接segmentation fault 01/01 16:03
14F:→ nh60211as: 。不然就是像Richun讲的在main的returnSize改成int,然 01/01 16:03
15F:→ nh60211as: 後传address 进twoSum 01/01 16:03
16F:→ allencheng: 问题已解决,解决内容跟 git commit 已更新在 hackMD 01/01 16:12
17F:→ allencheng: 谢谢大家的协助,搞懂问题出在哪了,会再补上解说 01/01 16:14
18F:→ Richun: 在pointer跟address那边你应该还很不熟,还没搞懂为什麽 01/01 16:21
19F:→ Richun: function的宣告returnSize是用int*型态(应该size_t*更好) 01/01 16:22
20F:→ allencheng: 参数型态的部分是因为 leetcode 里面就是这样宣告的 01/01 16:27
21F:→ allencheng: ,我是先在 LC 测过,再回过头尝试写测试练习 C 语言 01/01 16:27
22F:→ allencheng: 的 01/01 16:27
25F:推 Lipraxde: 程式风格百百种,就像口音一样,只要参与开发的时候能 01/03 12:25
26F:→ Lipraxde: 适应就好,更重要的事是逻辑层面的,要条理分明、精简 01/03 12:25
27F:→ Lipraxde: 而且完整 01/03 12:25
28F:推 dmeiki: 可以看 6.1810,看完会 c 跟作业系统 01/04 16:58
29F:→ allencheng: 感谢推荐!我会花点时间好好研究的 01/04 18:14
30F:推 dalbuhr: 赞喔 01/19 11:17
31F:推 hahalala: 请问 6.1810 这是? 02/01 20:00
32F:推 cloki: 关键字都有了就直接google吧... 02/02 06:51