簡體   English   中英

寫入時SIGSEGV分割錯誤,但不讀取?

[英]SIGSEGV segmentation fault when writing, but not reading?

我在其中有一個名稱空間ECFS一個內聯函數,並且具有以下內容:

inline void changeData(char* data, uint32_t len) {
    for (; len != 0; --len, --curpos) {
        std::cout << data[len] << std::endl;
        data[len] = 'C';
    }
}

讀取工作正常,但是寫入會導致段錯誤。 我已經分配了數據,並確保len不在范圍之內,也不知道發生了什么。

編輯:我用來調用它的行是:

char* str = new char[13];
str = "Hello world!";
ECFS::changeData(str, 12); // SIGSEGV
char* str = new char[13];
str = "Hello world!";
ECFS::changeData(str, 12); // SIGSEGV

您分配了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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM