C++ 写入但不读取时SIGSEGV分段错误?

C++ 写入但不读取时SIGSEGV分段错误?,c++,pointers,segmentation-fault,C++,Pointers,Segmentation Fault,我有一个名称空间ECFS,其中有一个内联函数,我有以下内容: inline void changeData(char* data, uint32_t len) { for (; len != 0; --len, --curpos) { std::cout << data[len] << std::endl; data[len] = 'C'; } } 您分配13个字节,并将指向它们的指针存储在str中。然后将该指针扔掉,并将

我有一个名称空间ECFS,其中有一个内联函数,我有以下内容:

inline void changeData(char* data, uint32_t len) {
    for (; len != 0; --len, --curpos) {
        std::cout << data[len] << std::endl;
        data[len] = 'C';
    }
}
您分配13个字节,并将指向它们的指针存储在str中。然后将该指针扔掉,并将str更改为指向常量。然后尝试修改str指向的对象,这是一个常量。不能修改常量

你想要:

char* str = new char[13];
strcpy(str, "Hello world!");
ECFS::changeData(str, 12);
使用代码

char* str = new char[13];
str = "Hello world!";
只是假设它会写入数组

这不是这里正在发生的事情。在

str = "Hello world!";

您正在使指向只读数据的str指针通常作为.rodata放入程序集中。任何写入只读数据的尝试都会导致分段错误或SIGSEGV。

告诉我们如何调用它。我打赌1000美元,你给它一个指向常数的指针。您不能修改常量,这就是使其成为常量的原因。帮助:您使用len作为索引时没有考虑到索引是0到数组大小-1。调用源解释了它,但是为了更好的编码实践,在命名/使用中显示它会有所帮助。@donjuedo我本来打算用正确的索引将它改为while循环:P,但是谢谢你的提示。仍然习惯于指针。。。。只是假设会写入数组。:/谢谢
char* str = new char[13];
str = "Hello world!";
str = "Hello world!";