[英]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.