我是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 ...
因为无效指针不断变化,我感觉对象没有被删除或被垃圾收集,每次运行代码我都会使用内存的另一个区域...
最后我开始明白为什么常规阵列更好......
*从一开始就为数据保留了内存中的连续空间
*无需担心删除...
这些只是我的猜测......
答案 0 :(得分:3)
您已超出访问权限:
char* str = new char; // single element
应该是
char* str=new char[max]; // array of char
你必须用
释放记忆delete [] str;
但为避免手动管理内存,您可以使用std::string
或std::vector<char>
答案 1 :(得分:1)
你只进行一次动态内存分配,只有1个char,但是你在最后一个for循环中多次删除动态分配的内存 - 你只能为每个新进行一次删除。
此外,在第一个for循环中,您将新的char值分配给您分配的内存之外的内存,这意味着您将覆盖不属于您的内存。