写入指针时出错,该指针通过将指针更改为数组来解决。发生了什么?

所以我在用C编写数独求解器,然后想到了一些我没想到的东西。

数独被存储为指向char的全局指针。

char *sudoku=
        "200050713"
        "431000805"
        "675800094"
        "016075000"
        "740268901"
        "052914037"
        "527600109"
        "164090382"
        "080102006";

在程序的某个地方,我自然不得不写数组,以使其简单(合法),让我们说:

sudoku[1] = '1';

我正在那条线上收到SIGSEGV。只需将全局变量sudoku的类型更改为数组即可解决。

char sudoku[] = ...

如果您想知道的话,没有其他名为sudoku的变量或函数。 我对此行为很好奇,全局指针是只读的吗?

koko89 回答:写入指针时出错,该指针通过将指针更改为数组来解决。发生了什么?

  

我对此行为很好奇,全局指针是只读的吗?

它与全局变量无关。调用char *s = "asdf"将在只读存储器中创建一个数组,并将指针s指向该数组。好吧,更准确地说,它不一定是只读存储器,而是可以,并且不管它是试图写入它的未定义行为。与此操作大致相同:

const char arr[] = "asdf";
char *s = arr;

但是,您的第二次尝试初始化了一个数组,并注意到它与上述代码片段的第一行有多么相似。只需删除const,您就会拥有相同的名字。

本文链接:https://www.f2er.com/3115175.html

大家都在问