c 程式執行時,儲存器無法讀取或寫入

發布 科技 2024-07-12
10個回答
  1. 匿名使用者2024-01-30

    你寫完了 char * s1 ="string"

    我在這裡弄錯了,所以所述字串 0 在常量區域,而 s1 在堆疊上。

    while(*ps1++=*ps2++)

    當你執行這句話時,ps1 需要寫入常量,它自然會報錯。

    這是乙個問題。

    只是,不是

    所有這一切都是連線 S1 和 S2

  2. 匿名使用者2024-01-29

    宣告為 char * s1 ="string"將來,s1 指向乙個字串常量,並且您不能嘗試更改 s1 將來指向的值。

    宣告 char s1[20] 後,用於表示"string"此字串 [初始化] 陣列 s1[20]。 在這種情況下,您可以更改 s1 指向的值。

    而(*ps1++=*ps2++),估計你把==寫錯了=。 把它寫成乙個等號,就是這樣。

    為 *ps1 賦值,即為 *s1 賦值。 當然,有乙個錯誤。

  3. 匿名使用者2024-01-28

    根據你的程式,你應該做的是合併字串:將 s2 新增到 s1 的末尾。

    while(*ps1)

    ps1++;

    將指標移動到 s1 的末尾。

    while(*ps1++=*ps2++)

    S2 連線到 S1,直到 S2 結束。

    當你把它宣告為 s1[20] 時,它是 20 個字元的空間,可以稍後編寫。

    當宣告為 *s 時,僅"string\"空格的長度,ps1 指標在移動到 s1 末尾時不可寫。

  4. 匿名使用者2024-01-27

    以程式的具體執行過程為例給大家講解一下,希望大家能理解:

    1.當程式開啟時,也就是當程式開始執行時,它會首先向作業系統請求獨佔記憶體空間(在程式整個執行過程中沒有釋放的空間),作業系統會響應請求,給程式分配乙個邏輯連續(實際上是將分散的記憶體空間對映到連續空間)的記憶體空間, 此時,程式獲取空間段的邏輯位址資訊,並根據位址將程式**段和資料段載入到記憶體中,此時將程式載入到記憶體中,程式完全載入。

    2.當程式需要更多記憶體空間時,會再次向作業系統傳送請求,作業系統會根據請求再次為程式分配記憶體空間,在執行處理任務時釋放記憶體空間。 同時,由於作業系統的儲存保護,程式只能訪問執行時申請的記憶體空間,而不能訪問其他程式的記憶體空間。

    3.當程式完成執行或關閉程式時,程式占用的所有記憶體空間都會被釋放。

    當您再次開啟程式時,請重複上述過程。

    以下是您的問題:

    1.程式執行時會被呼叫到記憶體中,程式在記憶體中的位置在不同時間執行時可能會有所不同:每次程式執行時,程式都會重新應用於作業系統的記憶體空間,然後作業系統會給程式分配新的記憶體空間, 因此,當程式在不同時間執行時,程式在記憶體中的位置是不同的。

    2.資料在記憶體中的位置也可以不同:當程式請求記憶體空間時,作業系統會將請求的記憶體空間的位址傳遞給程式,雖然資料的位置不同,但程式知道資料的位址,所以程式仍然可以根據位址找到它需要的資料。

  5. 匿名使用者2024-01-26

    此提示出現在執行階段,指示程式正在執行以訪問不可訪問的記憶體,即訪問越界。

    由於未讀取提示,因此它存在於讀取訪問中。 一般情況下,有以下幾種情況:

    1 對陣列訪問越界。

    迴圈訪問陣列或下標變數會導致陣列定義超出範圍是很常見的。

    對於 C 陣列,當定義或分配 n 個元素的空間時,下標或指標移動只允許在 0 n-1 的範圍內,超過這個範圍就超出了界限,導致了不可預測的後果,其中之一就是無法讀取記憶體。

    2 訪問或輸出字串時,沒有賦值終止符 0

    C 語言中的字串運算以 0 結尾。

    如果字串沒有指定終止符,則該函式將繼續被訪問,導致超出字串定義的空間範圍,並且無法讀取記憶體提示。

    3 指標鑄造。

    如果目標指標型別占用的空間多於指向該位址的原始指標,則新指標將用於訪問該位址,這將導致邊界被越過。

    例如,如果定義了乙個 10 位元組的結構變數,然後將位址分配給乙個 100 位元組的結構指標型別,那麼當您通過後者訪問最後乙個 90 位元組範圍時,這是乙個越界操作,並且可能存在記憶體不可讀錯誤。

  6. 匿名使用者2024-01-25

    #include

    #define n 5

    int main()

    if(i!=m)printf("%5d",a[i]);

    for(i = 0; i < n; i++)s--;

    for(i = 0; i < s; i++)return 0;

    可能有一些細節需要詢問。 如果你發現有什麼不對勁的地方,就說下乙個...... 還有問題... 我會回來修改它。

  7. 匿名使用者2024-01-24

    我這邊的執行似乎沒有問題(結果肯定不對)。

    您可以使用分步跟蹤來檢視它掛在哪條線上。

  8. 匿名使用者2024-01-23

    在首次執行 J++ 之前,您沒有為 J 分配初始值。

  9. 匿名使用者2024-01-22

    在修理電腦時,我經常會遇到這種問題。

    第一:【閱讀修復工具】,修復,試試!

    1。帶有木馬或病毒的遊戲或軟體! (防病毒,完全掃瞄和自定義掃瞄,重新啟動後,隔離,完全刪除)。

    2。遊戲或軟體與其他遊戲衝突! (類似的軟體,彼此不相容! 開始選單、程式、解除安裝、只留下乙個遊戲)。

    5。遊戲或軟體缺少必要的 dll 檔案或肢體引線遊戲補丁! (DLL檔案,360系統急救箱,DLL檔案恢復,新增恢復! 遊戲補丁推薦請前往:官網**! )

    6。遊戲或軟體帶有差評外掛程式! (您可以使用 360 Security Guard 或 Kingsoft Guard,或 Keniu Free Antivirus,掃瞄外掛程式,並立即清理)。

    8。遊戲或軟體存在錯誤或錯誤,或帶有可疑的啟動木馬! (嘗試:360系統急救箱,系統修復,全選,立即修復! 網路干擾修復,開始修復!

    再次:開始急救! 重新啟動後,單擊“檔案恢復區域”並全選以完全刪除檔案)!

    9。沒有了,開始選單,執行,輸入cmd,按回車鍵,在命令提示符下輸入(複製它):

    for %1 in (%windir%\system32\*.ocx) do regsvr32 /s %1

    貼上,按 Enter 鍵,然後鍵入:

    for %1 in (%windir%\system32\*.dll) do /s %1

    進入! 在螢幕滾動停止之前,請重新啟動計算機!

    10。它真的不起作用,恢復系統。

    以上我都試過了,如果問題還是一樣,那就是硬體問題,請使用排除法確定某件硬體有問題,並及時修復和更換。 謝謝!

  10. 匿名使用者2024-01-21

    你好! 電腦出現:【記憶體無法讀寫】,原因比較複雜,請開對藥!

    1。配置錯誤! 【重啟,電腦品牌出來後,按F8,安全模式,上次正確配置,回車,回車】!

    2。系統漏洞! 【360保安或金山衛士,或健牛免費防毒,維修:高風險重要,其他忽略】!

    3。軟體衝突! 【解除安裝不常用軟體,保持系統穩定,尤其是同型別軟體,不相容】!

    4。軟體版本已過時! [使用:(驅動器壽命),更新:顯示卡驅動程式,聲音驅動程式! 其他軟體,覆蓋安裝]!

    5。病毒木馬! 【防毒軟體,全盤隱藏掃瞄和自定義掃瞄,完成後,隔離,完全刪除】!

    6。差評外掛程式! 【Keniu 免費防毒軟體、金山衛士、或 Talk Chain Hall 360 保安衛士、清理不良評論外掛程式】!

    7。可疑的初創公司! 【360系統急救包,啟動急救,檔案恢復區,完全刪除檔案】!

    8。系統檔案損壞! 【金山急救包】,擴充套件掃瞄,立即掃瞄,立即處理,重啟電腦]!

    10。指令修復方法! 開始選單,執行,輸入cmd,按回車鍵,在命令提示符下輸入(複製就足夠了):

    for %1 in (%windir%\system32\*.ocx) do regsvr32 /s %1

    貼上,按回車鍵,完成滾動後,再次鍵入:

    for %1 in (%windir%\system32\*.dll) do /s %1

    進入! 在螢幕滾動停止之前,請重新啟動計算機!

相關回答
12個回答2024-07-12

記憶體不能"read"或"written"(原因和解決方案): >>>More

9個回答2024-07-12

這個問題的出現比較普遍,主要有幾個方面: >>>More

13個回答2024-07-12

記憶體不能"read"或"written"(原因和解決方案): >>>More

13個回答2024-07-12

我給你7種除錯方法,試試看:

1.如果電腦有木馬或病毒干擾,**“360安防衛士”和“360防毒雙引擎版”,建議對病毒和木馬進行“掃瞄”,修補電腦上的漏洞! >>>More