一个关于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下跑了下。。。好像是没报错。。。这是为啥啊。 展开
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下跑了下。。。好像是没报错。。。这是为啥啊。 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询