c++ new 和delete的问题
intmain(){stringfilename="D:\\3区BallGps0407\\PC01(S301)-T301-bagps.CSV";ifstreamReadF...
int main()
{
string filename = "D:\\3区BallGps0407\\PC01(S301)-T301-bagps.CSV";
ifstream ReadFile ;
int len = N_element(filename); //自定义函数统计文件的行数
ReadFile.open(filename,ios::in);
string *str;
str = new string[len+1];
int i = 0;
while(getline(ReadFile,str[i]))
{
i++;
}
for(int j =0;j<len;j++)
{
cout<<str[j]<<endl;
}
delete str;
return 0;
}
我在return前面不加delete的时候运行的时候的结果是正确的,写了delete每次可以编译成功但是运行的时候会出错 展开
{
string filename = "D:\\3区BallGps0407\\PC01(S301)-T301-bagps.CSV";
ifstream ReadFile ;
int len = N_element(filename); //自定义函数统计文件的行数
ReadFile.open(filename,ios::in);
string *str;
str = new string[len+1];
int i = 0;
while(getline(ReadFile,str[i]))
{
i++;
}
for(int j =0;j<len;j++)
{
cout<<str[j]<<endl;
}
delete str;
return 0;
}
我在return前面不加delete的时候运行的时候的结果是正确的,写了delete每次可以编译成功但是运行的时候会出错 展开
3个回答
展开全部
这个是C++中的string 库函数关于内存释放的问题!如果你已经申请了一个string 内存对象,那么会自动释放!当你再次调用delete时候,str已经被释放了!所以才会出错,好好看看string库的内存分配使用规则!大概是这样,我也记不太清了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我在你程序基础上改了,运行并未发现什么异常吗,改后代码如下:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
string filename = "220.cpp";
ifstream ReadFile ;
int len = 100;//N_element(filename); //自定义函数统计文件的行数
ReadFile.open("220.cpp",ios::in);
if(!ReadFile)
{
cout<<"open error!"<<endl;
}//
else
{
cout<<"open success!"<<endl;
}
string *str;
str = new string[len+1];
int i = 0;
while(getline(ReadFile,str[i]))
{
i++;
}
cout<<"文件220.cpp 总行数为"<<i<<endl;
for(int j =0;j<i;j++)
{
cout<<str[j]<<endl;
}
delete str;
return 0;
}
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
string filename = "220.cpp";
ifstream ReadFile ;
int len = 100;//N_element(filename); //自定义函数统计文件的行数
ReadFile.open("220.cpp",ios::in);
if(!ReadFile)
{
cout<<"open error!"<<endl;
}//
else
{
cout<<"open success!"<<endl;
}
string *str;
str = new string[len+1];
int i = 0;
while(getline(ReadFile,str[i]))
{
i++;
}
cout<<"文件220.cpp 总行数为"<<i<<endl;
for(int j =0;j<i;j++)
{
cout<<str[j]<<endl;
}
delete str;
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
delete[] str;
另外这种时候用 vector 就好了嘛,何必用 new[]/delete[] 手动管理内存……
另外这种时候用 vector 就好了嘛,何必用 new[]/delete[] 手动管理内存……
追问
delete[]和delete有什么区别!如果用vector的话,就那个读文件的那一句怎么写,谢谢啊!
追答
如果 new 的是数组(T[]那种,std::vector 和 std::array 等等不算在内),则对应的是 delete[]。否则 new 对应的是 delete(placement new 对应自定义的内存释放方式,那又是另一回事了)
除了把
string *str;
str = new string[len+1];
换成
vector<string> str(len+1);
,以及不需要 delete[] 以外,其他地方应该不需要改动
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询