-
你寫完了 char * s1 ="string"
我在這裡弄錯了,所以所述字串 0 在常量區域,而 s1 在堆疊上。
while(*ps1++=*ps2++)
當你執行這句話時,ps1 需要寫入常量,它自然會報錯。
這是乙個問題。
只是,不是
所有這一切都是連線 S1 和 S2
-
宣告為 char * s1 ="string"將來,s1 指向乙個字串常量,並且您不能嘗試更改 s1 將來指向的值。
宣告 char s1[20] 後,用於表示"string"此字串 [初始化] 陣列 s1[20]。 在這種情況下,您可以更改 s1 指向的值。
而(*ps1++=*ps2++),估計你把==寫錯了=。 把它寫成乙個等號,就是這樣。
為 *ps1 賦值,即為 *s1 賦值。 當然,有乙個錯誤。
-
根據你的程式,你應該做的是合併字串:將 s2 新增到 s1 的末尾。
while(*ps1)
ps1++;
將指標移動到 s1 的末尾。
while(*ps1++=*ps2++)
S2 連線到 S1,直到 S2 結束。
當你把它宣告為 s1[20] 時,它是 20 個字元的空間,可以稍後編寫。
當宣告為 *s 時,僅"string\"空格的長度,ps1 指標在移動到 s1 末尾時不可寫。
-
以程式的具體執行過程為例給大家講解一下,希望大家能理解:
1.當程式開啟時,也就是當程式開始執行時,它會首先向作業系統請求獨佔記憶體空間(在程式整個執行過程中沒有釋放的空間),作業系統會響應請求,給程式分配乙個邏輯連續(實際上是將分散的記憶體空間對映到連續空間)的記憶體空間, 此時,程式獲取空間段的邏輯位址資訊,並根據位址將程式**段和資料段載入到記憶體中,此時將程式載入到記憶體中,程式完全載入。
2.當程式需要更多記憶體空間時,會再次向作業系統傳送請求,作業系統會根據請求再次為程式分配記憶體空間,在執行處理任務時釋放記憶體空間。 同時,由於作業系統的儲存保護,程式只能訪問執行時申請的記憶體空間,而不能訪問其他程式的記憶體空間。
3.當程式完成執行或關閉程式時,程式占用的所有記憶體空間都會被釋放。
當您再次開啟程式時,請重複上述過程。
以下是您的問題:
1.程式執行時會被呼叫到記憶體中,程式在記憶體中的位置在不同時間執行時可能會有所不同:每次程式執行時,程式都會重新應用於作業系統的記憶體空間,然後作業系統會給程式分配新的記憶體空間, 因此,當程式在不同時間執行時,程式在記憶體中的位置是不同的。
2.資料在記憶體中的位置也可以不同:當程式請求記憶體空間時,作業系統會將請求的記憶體空間的位址傳遞給程式,雖然資料的位置不同,但程式知道資料的位址,所以程式仍然可以根據位址找到它需要的資料。
-
此提示出現在執行階段,指示程式正在執行以訪問不可訪問的記憶體,即訪問越界。
由於未讀取提示,因此它存在於讀取訪問中。 一般情況下,有以下幾種情況:
1 對陣列訪問越界。
迴圈訪問陣列或下標變數會導致陣列定義超出範圍是很常見的。
對於 C 陣列,當定義或分配 n 個元素的空間時,下標或指標移動只允許在 0 n-1 的範圍內,超過這個範圍就超出了界限,導致了不可預測的後果,其中之一就是無法讀取記憶體。
2 訪問或輸出字串時,沒有賦值終止符 0
C 語言中的字串運算以 0 結尾。
如果字串沒有指定終止符,則該函式將繼續被訪問,導致超出字串定義的空間範圍,並且無法讀取記憶體提示。
3 指標鑄造。
如果目標指標型別占用的空間多於指向該位址的原始指標,則新指標將用於訪問該位址,這將導致邊界被越過。
例如,如果定義了乙個 10 位元組的結構變數,然後將位址分配給乙個 100 位元組的結構指標型別,那麼當您通過後者訪問最後乙個 90 位元組範圍時,這是乙個越界操作,並且可能存在記憶體不可讀錯誤。
-
#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;
可能有一些細節需要詢問。 如果你發現有什麼不對勁的地方,就說下乙個...... 還有問題... 我會回來修改它。
-
我這邊的執行似乎沒有問題(結果肯定不對)。
您可以使用分步跟蹤來檢視它掛在哪條線上。
-
在首次執行 J++ 之前,您沒有為 J 分配初始值。
-
在修理電腦時,我經常會遇到這種問題。
第一:【閱讀修復工具】,修復,試試!
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。它真的不起作用,恢復系統。
以上我都試過了,如果問題還是一樣,那就是硬體問題,請使用排除法確定某件硬體有問題,並及時修復和更換。 謝謝!
-
你好! 電腦出現:【記憶體無法讀寫】,原因比較複雜,請開對藥!
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
進入! 在螢幕滾動停止之前,請重新啟動計算機!
我給你7種除錯方法,試試看:
1.如果電腦有木馬或病毒干擾,**“360安防衛士”和“360防毒雙引擎版”,建議對病毒和木馬進行“掃瞄”,修補電腦上的漏洞! >>>More