main()声明的指针经函数malloc后出现段错误的原因
段错误原因分析
核心问题是运算符优先级导致的非法内存访问:
- 数组下标运算符
[]的优先级高于间接访问运算符*,代码中的*ptr[i]会被编译器解析为*(ptr[i])。 ptr是int**类型(指向指针的指针),ptr[i]表示访问ptr指向的内存区域中第i个int*元素,但实际上ptr仅指向main函数里单个int*变量的地址,当循环中i >= 1时,ptr[i]会访问超出有效范围的内存,触发段错误。- 正确写法应为
(*ptr)[i]:先通过*ptr解引用得到malloc分配的int数组首地址,再用[i]访问数组第i个元素。
修正后的关键代码片段:
// 替换原错误行 (*ptr)[i] = i ; printf("%d %d\n" , i , (*ptr)[i]) ;
内容的提问来源于stack exchange,提问作者Luke Rossenvalden
相关产品推荐
相关产品推荐

