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

为何无法通过解引用int指针作为索引访问字符指针数组?

问题根源与解决方案

你的代码核心问题出在assign函数的循环变量定义上:

for(int *i=0;*i<2;(*i)++){
    arr[*i]=ele1;       
 }
  • int *i=0 是将指针i初始化为空指针(NULL),此时对*i进行解引用(读取或修改值)属于C语言中的未定义行为。程序在第一次尝试读取*i判断循环条件时,就已经触发了非法内存访问,后续的(*i)++更是试图修改空指针指向的内存区域,这会直接导致程序崩溃、报错或出现不可预测的运行结果。

而注释掉的循环代码:

for(int i=0;i<2;i++){
    arr[i]=ele1;        
}

之所以能正常运行,是因为i是普通的int变量,存储在合法的栈内存空间中,对它的读写操作都是符合内存规则的合法行为。

你认为“仅赋值2个元素不应出现未定义行为”,但问题的本质不在赋值操作本身,而是循环变量的初始化和读写逻辑已经违反了内存访问规范——未定义行为的表现是不可控的,哪怕在某些场景下看似“正常”,也属于错误的代码逻辑。

修正方案

如果一定要用指针作为循环变量,需要先给指针分配合法的内存空间,比如让它指向一个栈上的int变量:

int assign(char **arr,char *ele1){
    int val = 0;
    int *i = &val;
    for(;*i<2;(*i)++){
        arr[*i]=ele1;       
     }
    return 0; // 补充函数返回值,原代码缺少返回会触发编译警告
}

内容的提问来源于stack exchange,提问作者neo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 09:09:55