You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

访问双指针数组时出现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 17:52:05