[問題] 請問這一段程式有什麼問題嗎?

看板C_and_CPP作者 (藍色的憂鬱)時間13年前 (2011/04/10 10:58), 編輯推噓4(4012)
留言16則, 8人參與, 最新討論串1/1
開發平台(Platform): VC++ 程式碼 int main() { char * ptr; ptr=new char[10]; ptr="123456789"; ------------------------------------ //如果將上面的ptr="123456789"改為 for(int i=0;i<10;i++) *(ptr+i)=49+i; *(ptr+i)='\0'; //是不是就有用到new的空間了 ------------------------------------ *(ptr+3)='z'; cout <<ptr; return 0; } 錯誤訊息 類型 'System.AccessViolationException' 的未處理例外狀況發生於 ch5.exe 其他資訊: 嘗試讀取或寫入受保護的記憶體。這通常表示其他記憶體已損毀。 問題 這種寫法有什麼問題嗎? 不好意思,因為修改內容,所以推文一起修掉。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.85.41.151

04/10 11:05, , 1F
那請問另一個問題,如果我將int * ,改為char * ,編譯時
04/10 11:05, 1F

04/10 11:06, , 2F
就會出現"無法對保護的記憶體寫入",是不是字串不能更改
04/10 11:06, 2F

04/10 11:07, , 3F
如果想更改字串中的字元,一定要用string的宣告嗎?
04/10 11:07, 3F

04/10 11:11, , 4F
你把你改過的那個版本貼上來大家看看好了
04/10 11:11, 4F

04/10 11:11, , 5F
光這樣改應該不致於碰到這個問題
04/10 11:11, 5F

04/10 11:11, , 6F
(我是知道一個可能性 但還是要貼 code 才知道)
04/10 11:11, 6F
※ 編輯: ruthenium 來自: 219.85.41.151 (04/10 11:16)

04/10 11:22, , 7F
13誡之4
04/10 11:22, 7F

04/10 11:23, , 8F
另外要用strcpy
04/10 11:23, 8F

04/10 11:29, , 9F
字串結尾符號補一下
04/10 11:29, 9F

04/10 11:29, , 10F
因為 "123456789" 存在唯讀的記憶體區段, 而且這樣 "=" 是
04/10 11:29, 10F

04/10 11:30, , 11F
改變 ptr 所指向的記憶體位址, 而不是複製資料...
04/10 11:30, 11F

04/10 11:32, , 12F
原來是13誡之4。
04/10 11:32, 12F

04/10 11:59, , 13F
你new到的空間跟本沒用到
04/10 11:59, 13F
※ 編輯: ruthenium 來自: 219.85.41.151 (04/10 13:37) ※ 編輯: ruthenium 來自: 219.85.41.151 (04/10 13:38) ※ 編輯: ruthenium 來自: 219.85.41.151 (04/10 13:39)

04/10 13:40, , 14F
紅字的答案是yes.不過也可寫strcpy(ptr, "123456789");
04/10 13:40, 14F

04/10 13:45, , 15F
了解,上面的寫法簡潔多了。
04/10 13:45, 15F

04/11 09:32, , 16F
紅字第三行用到第11個byte
04/11 09:32, 16F
文章代碼(AID): #1DeHozNV (C_and_CPP)