簡體   English   中英

C ++指針組成一個數組

[英]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::stringstd::vector<char>

您只進行一次動態內存分配,並且只分配了1個字符,但是您在最后一個for循環中多次刪除了動態分配的內存-您只能對每個新的內存執行一次刪除。

此外,在第一個for循環中,您將新的char值分配給分配的內存之外的內存,這意味着您將覆蓋非您擁有的內存。

暫無
暫無

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

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