首页 > 解决方案 > 为什么使用 char 指针数组会出现分段错误?

问题描述

我正在尝试使用 c 和指针,因为我是该语言的新手,但我不确定为什么会出现分段错误,当我将所有内容初始化为 null 然后重新编写数组时字符指针?有人可以解释我做错了什么吗?

#define MAX_SIZE 70    
void gridTest(char*[]);

int main()
{
    char *grid[MAX_SIZE] = {0};
    testGrid(grid);
    return 0;
}    

void testGrid(char *grid[]){
    for(int i=0;i<MAX_SIZE;i++){
        *grid[i] = ' ';
    }
    for(int j=0;j<MAX_SIZE;j++){          
        printf("The Character is space, test: %c",*grid[j],j);
    }
}

错误

Segmentation fault: 11

标签: carrays

解决方案


检查这一行

  *grid[i] = ' ';

您正在尝试将空格字符存储在 指向的内存中grid[i],这很酷,但是那个指向哪里?

答案是:无效的内存(空指针,它是)。您尝试使用的内存地址无效,并尝试尊重它会调用未定义的行为。

话虽这么说,看到你的用法,你不需要一个char指针数组,一个数组char就足够了。将您的数组定义更改为

 char grid[MAX_SIZE] = {0};

并将调用的函数更改为

void testGrid(char grid[]){

        for(int i=0;i<MAX_SIZE;i++){
              grid[i] = ' ';
         }
        for(int j=0;j<MAX_SIZE;j++){
           printf("The Character is space, test: %c",grid[j],j);
        }
 }

推荐阅读