簡體   English   中英

訪問沖突寫入位置?

[英]Access violation writing location?

我正在嘗試編寫一個函數來反轉字符串,但是我在執行此操作時遇到了這樣的異常:* str ++ = * end; 誰知道是什么原因? 提前致謝。

void reverse(char* str)
 {
    char *end = str;
    char temp;
    if(str)
    {
      while(*end)
       {
     end++;
       }
    end--;

    while(str<end)
    {
       temp = *str;
       *str++ = *end;
       *end--=temp;
    }
   }
 }

您可能使用字符串文字調用了該函數:

 reverse("ablewasiereisawelba");

您必須先調用未定義的行為才能修改字符串文字,並且崩潰是對嘗試修改字符串文字的有效回應。 確保您改為傳遞非常量數組:

 char palindrome[] = "ablewasiereisawelba";
 reverse(palindrome);

C ++ 2011標准ISO / IEC 14882:2011指出:

2.14.5字符串文字[lex.string]

¶12嘗試修改字符串文字的效果是不確定的。

通常,字符串文字被放置在只讀存儲器中,而嘗試修改它會導致“崩潰”。 對於調用不確定的行為,這當然是一個完全合法的回應。

因此,您需要這樣做:

 char str[] = "My string to reverse!";

 reverse(str);

這意味着str存儲在可修改的內存中。 大多數現代編譯器都將文字字符串存儲在字符串中(即“引號中的所有內容”都位於只讀存儲器中,因為您無意修改原始字符串)。

暫無
暫無

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

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