用于创建数组的C ++指针

时间:2015-01-16 09:23:38

标签: c++ arrays pointers

我是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;
}

但我不确定删除(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 ...

因为无效指针不断变化,我感觉对象没有被删除或被垃圾收集,每次运行代码我都会使用内存的另一个区域...

最后我开始明白为什么常规阵列更好......

*从一开始就为数据保留了内存中的连续空间

*无需担心删除...

这些只是我的猜测......

2 个答案:

答案 0 :(得分:3)

您已超出访问权限:

char* str = new char; // single element

应该是

char* str=new char[max]; // array of char

你必须用

释放记忆
delete [] str;

但为避免手动管理内存,您可以使用std::stringstd::vector<char>

答案 1 :(得分:1)

你只进行一次动态内存分配,只有1个char,但是你在最后一个for循环中多次删除动态分配的内存 - 你只能为每个新进行一次删除。

此外,在第一个for循环中,您将新的char值分配给您分配的内存之外的内存,这意味着您将覆盖不属于您的内存。