一个关于c++,动态指针的小问题。 5

#include<iostream>usingnamespacestd;char*removespace(chara[]){intlen=strlen(a);for(in... #include<iostream>
using namespace std;

char* removespace(char a[]) {

int len = strlen(a);
for (int i = 0; i < strlen(a); ++i)
if (a[i] == ' ')
len = len + 2;

cout << len << endl;

char* a_new = new char[len + 1];

char* pt_new = &a_new[0];
char* pt = &a[0];
for (int i = 0; i < len; ++i) {
if (*pt++ == ' ') {
*pt_new++ = '%';
*pt_new++ = '2';
*pt_new++ = '0';
}
else {
*pt_new++ = *(pt - 1);
}
}
*pt_new = '\0';

pt = nullptr;
pt_new = nullptr;

return a_new;
}

int main() {
char a[] = "hello world";

char* a_new = removespace(a);

cout << a_new << endl;

// delete [] a_new;

return 0;
}

问题就在于我// 掉的那一行。
一般情况下,如果不是子程序removespace里我用了两个指针指向同一块地址,delete [] a_new是不会有问题的。

问题是,我已经把pt_new 指向了nullptr了啊。现在应该只有a_new自己指向那块区域了。
为什么delete还是会报错呢。

不知道对哪里理解有问题?

还有如果动态申请了一块空间。就像我pt和pt_new。用完之后把他们nullptr了,会怎么样?
那块空间谁都找不到了么?在程序运行完之前都没办法被释放了嘛?

谢谢高手哈。
我用的vs2013。不过我又试了试。在Ubuntu下跑了下。。。好像是没报错。。。这是为啥啊。
展开
 我来答
冉梦菲Pw
2015-04-11 · TA获得超过2199个赞
知道大有可为答主
回答量:3742
采纳率:14%
帮助的人:1972万
展开全部
我用DEV C++编译和运行都正常,输出为:
13
hello20%world
追问
是没错啊。。。
你把这个// delete [] a_new;

// 去掉。再试试。
会报错啊。
追答
就是把delete [] a_new加到程序里了,没报错
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式