访问双指针数组时出现Segmentation Fault/Memory Access Violation问题求助
问题分析与修复方案
你的代码核心问题是运算符优先级错误:[]的优先级高于*,所以*v[i]会被编译器解析为*(v[i])——这相当于把传入的int** v当成了一个指针数组,试图取它的第i个指针元素再解引用,但你实际传入的是单个动态数组的地址,v只是指向这个一维数组指针的单指针,并非指针数组。
修复后的代码如下:
#include <stdio.h> #include <stdlib.h> void fn(int **v, int size) { for(int i = 0; i < size; i++) printf("%d @ %p\n", (*v)[i], &(*v)[i]); } int main() { int *v = (int*)malloc(sizeof(int) * 4); v[0] = 1; v[1] = 2; v[2] = 3; v[3] = 4; fn(&v, 4); }
关键修复点
- 将
*v[i]改为(*v)[i]:先通过*v解引用得到动态数组的起始指针,再用[i]访问数组的第i个元素 - 对应的地址获取
&*v[i]也改为&(*v)[i],或者直接写成(*v) + i,两者效果一致
修复后运行代码,就能正确输出每个数组元素的值及其对应的内存地址了。
内容的提问来源于stack exchange,提问作者nyedoardo
相关产品推荐
相关产品推荐

