【发布时间】:2014-11-11 15:10:05
【问题描述】:
我是编程初学者,最近写了这段代码
#include<iostream>
using namespace std;
void removeAllCharacters(char * , char * );
void printArray(char*);
void deleteArrays(char*,char*);
int main()
{
char * source,*remove;
source=new char[18];
remove=new char[10];
source="Hello how are you";
remove="Hi Its me";
removeAllCharacters(source,remove);
printArray(source);
deleteArrays(source,remove);
system("pause");
return 0;
}
void removeAllCharacters(char * source, char * remove)
{
int N1=strlen(source)+1;
int N2=strlen(remove)+1;
bool arr[128] = {false};
for(int i=0;i<N2-1;i++)
{
arr[remove[i]]=1;
}
char *newSource=new char[N1];
for(int i=0,j=0;i<N1-1;i++)
{
if(arr[source[i]]==0)
{
newSource[j++]=source[i];
}
}
delete [] source;
source=newSource;
newSource=0;
}
void printArray(char* arr)
{
int N=strlen(arr)+1;
for(int i=0;i<N;i++)
{
cout << arr[i];
}
cout << endl << endl;
}
void deleteArrays(char* arr1,char*arr2)
{
delete [] arr1;
arr1=0;
delete[]arr2;
arr2=0;
}
我试过调试,发现只有 错误发生在 delete[] 源;在 removeCharacters 函数中。我尝试在网上寻找解决方案,但找不到。 为什么会出现此错误?错误是因为我从 main 分配了动态内存,但我正在从函数中删除它?
【问题讨论】:
-
你看到了什么错误?
-
我不确定这是什么意思:
arr[remove[i]]=1,但它会导致未定义的行为。 -
使用
std::string,你的代码就可以工作了。您将指针与对象混淆了。
标签: c++ visual-studio-debugging