[问题] 询问 C 语言的问题 & 学习资源请教

楼主: allencheng (艾伦郑)   2023-01-01 13:46:07
开发平台(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 的时候执行错误
有尝试寻找问题的原因,但可能是观念不足或不知道关键字
找不到可以解释的地方
所以才来这询问是什么原因造成错误?
作者: stucode   2023-01-01 14:17:00
问题应该是出在没有初始化 returnSize
作者: Richun (解放左手的OO之力)   2023-01-01 15:44:00
gcc先加个flag -Wall 把所有的warning都开出来你的returnSize是一个简单的int能处理的事,在main里面只需要初始化 size_t returnSize = 0; 或把size_t换成int在call function传参数时加上&,&returnSize传址进去。
楼主: allencheng (艾伦郑)   2023-01-01 15:58:00
您好,已补上初始化,但是变成编译过,执行错误 Orz有把讯息补在 hackMD link 上,请参照,谢谢
作者: Schottky (顺风相送)   2023-01-01 16:01:00
......请问returnSize做什么用途,初始化为NULL是对的吗
作者: nh60211as   2023-01-01 16:03:00
初始化是要malloc,你的twoSum里面是直接assign value,如果returnSize是NULL,当然会直接segmentation fault。不然就是像Richun讲的在main的returnSize改成int,然后传address 进twoSum
楼主: allencheng (艾伦郑)   2023-01-01 16:12:00
问题已解决,解决内容跟 git commit 已更新在 hackMD谢谢大家的协助,搞懂问题出在哪了,会再补上解说
作者: Richun (解放左手的OO之力)   2023-01-01 16:21:00
在pointer跟address那边你应该还很不熟,还没搞懂为什么function的宣告returnSize是用int*型态(应该size_t*更好)
楼主: allencheng (艾伦郑)   2023-01-01 16:27:00
参数型态的部分是因为 leetcode 里面就是这样宣告的,我是先在 LC 测过,再回过头尝试写测试练习 C 语言的
作者: Dracarys (MayShowGunMore)   2023-01-01 18:47:00
作者: Lipraxde (Lipraxde)   2023-01-03 12:25:00
程式风格百百种,就像口音一样,只要参与开发的时候能适应就好,更重要的事是逻辑层面的,要条理分明、精简而且完整
作者: dmeiki (熊麻吉)   2023-01-04 16:58:00
可以看 6.1810,看完会 c 跟作业系统
楼主: allencheng (艾伦郑)   2023-01-04 18:14:00
感谢推荐!我会花点时间好好研究的
作者: dalbuhr (残月之肃)   2023-01-19 11:17:00
赞喔
作者: hahalala (创业&迈向另ㄧ个高峰)   2023-02-01 20:00:00
请问 6.1810 这是?
作者: cloki (夜云天)   2023-02-02 06:51:00
关键字都有了就直接google吧...

Links booklink

Contact Us: admin [ a t ] ucptt.com