[英]C++ pointers to make an array
我是C ++的新手,我在玩指針。此代碼使用char ptr作為數組。
#include<iostream>
using namespace std;
int main (){
cout << "Playground "<<endl;
const short max=10;
char * str=new char ;
for (short i=0;i<max;i++)
*(str+i)=char(i+100);
for (short i=0;i<max;i++)
cout <<str+i<< char(3) <<endl;
for(short i=0;i<max;i++)
delete (str+i);
return 0;
}
但是我不確定delete(str + i)是否有效,為什么? 但我認為它不起作用,因為我已經多次運行了該程序,盡管該字符串已打印出來:
Playground
defghijklm
efghijklm
fghijklm
ghijklm
hijklm
ijklm
jklm
klm
lm
m
我有此錯誤消息
try #0
*** Error in `./p': free(): invalid pointer: 0x09d90009 ***
Aborted (core dumped)
try #1
*** Error in `./p': free(): invalid pointer: 0x08453009 ***
Aborted (core dumped)
try #2
*** Error in `./p': free(): invalid pointer: 0x0863c009 ***
Aborted (core dumped)
etc ...
因為無效指針不斷變化,所以我感覺對象沒有被刪除或垃圾回收,每次運行代碼時,我都使用內存的另一個區域...
終於我開始明白為什么常規數組更好了...
*從一開始就在內存中為數據保留連續的空間
*無需擔心刪除...
這些只是我的猜測...
您的訪問權限不受限制:
char* str = new char; // single element
應該
char* str=new char[max]; // array of char
你必須用釋放內存
delete [] str;
但是為了避免手動管理內存,可以使用std::string
或std::vector<char>
您只進行一次動態內存分配,並且只分配了1個字符,但是您在最后一個for循環中多次刪除了動態分配的內存-您只能對每個新的內存執行一次刪除。
此外,在第一個for循環中,您將新的char值分配給分配的內存之外的內存,這意味着您將覆蓋非您擁有的內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.