c - 为什么使用 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
解决方案
检查这一行
*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);
}
}
推荐阅读
- swift - “形状”变量如何在引擎盖下工作?
- python - 如何使用 lambda 函数将文件上传到 Amazon S3?
- spring-boot - 您如何断言将对象添加到另一个对象多对多
- python - 我可以有效地进行多维切片吗?
- python - 火炬 | 使用数据集 Omniglot 获取“RuntimeError: Found dtype Long but expected Float”
- windows - 在安全桌面(登录屏幕)上的 Windows 10 轻松访问菜单中添加自定义条目
- objective-c - 解析 PFUser 对象不会解码
- docker - 从 docker-compose 运行时状态存储抛出异常
- python - 选择缺失值熊猫数据框
- sql - 连接后根据辅助列中的最大计数生成结果