关于new和delete的问题
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
#define SONG_LENGTH 20
#define ARTIST_LENGTH 20
#define CD_LENGTH 20
class Song{
public:
char* song;
char* artist;
char* cd;
int rating;
Song* next;
};
Song* new_song(char* song, char* artist, char* cd, int rating){
Song *head=new Song;
head->song = new char(SONG_LENGTH+10);
head->artist = new char(ARTIST_LENGTH+10);
head->cd = new char(CD_LENGTH+10);
strcpy(head->song,song);
strcpy(head->artist,artist);
strcpy(head->cd,cd);
head->rating=rating;
head->next=NULL;
return head;
}
Song *insert_by_song(Song *head,Song *node)//插入
{
if(head==NULL)
{
node->next=NULL;
head=node;
return head;
}
else
{
node->next=head;
head=node;
return head;
}
}
Song* delete_odd(Song* head){
Song *p=head;
Song *before = NULL;
while(p!=NULL){
cout<<strlen(p->artist)<<endl;
system("pause");
if (p->rating%2==0){
if(before==NULL){
head=p->next;
delete [] (p->artist); //在运行时会出现heap corruption detected
delete [] (p->cd);
delete [] (p->song);
delete p;
p=head;
}
else{
delete [](p->artist);
delete [](p->cd);
delete [](p->song);
p->artist=NULL;
p->cd=NULL;
p->song=NULL;
before->next=p->next;
delete p;
p=before->next;
}
}
else{
before=p;
p=p->next;
}
}
return head;
}
int main(int argc, char** argv){
cout<<"The size of the struct type Song is "
<<sizeof(Song)
<<" bytes."
<<endl;
if(argc<2)
{
cout<<"Error: Insufficient CommandLine arguments.\n";
cout<<"Usage: linkedlist <filename><CR>\n";
return 0;
}
Song *head = NULL;
print_list(head);
Song *node = NULL;
int rating; /* cout<< hex <<uppercase;*/
ifstream source(*(argv+1));
while(!source.eof())
{
char *song = new char(SONG_LENGTH);
char *artist = new char(ARTIST_LENGTH);
char *cd = new char(CD_LENGTH);
source >> song; //从文件输入
source >> artist;
source >> cd;
source >> rating;
new_song(song,artist,cd,rating); //创建新的结构
head = insert_by_song(head,node); //插入链表
cout << endl;
}
source.close();
delete_odd(head);
system("pause");
return 0;
}
下面是要读取的TXT文件内容
//荷塘月色 凤凰传奇 未知/Unknown 4
//光辉岁月 Beyond 未知/Unknown 3
//天机 张学友&白鹭 影视歌曲 4
//Yesterday Beatles Help! 5
//Paradise Cody_Simpson <Paradise> 3
//Misery Maroon_5 Hands_All_Over 4
//Smooth Santana Supernatural 5
//Something Beatles Abbey_Road 5
//GoodtimeGirl Grant_Grieves 45S 4
//Sunshine Minnutes The_Big_C 2
//Time E.J.Bucher SongInGoodTime 3
//去伊犁的路上 刀郎 未知/Unknown 5
//葫芦娃 未知/Unknown 儿童歌曲 4
//恰似你的温柔 邓丽君 经典歌曲 5
//You_And_Me Shane_Filan 奥运 5
//外婆的澎湖湾 蔡琴 爱像一首歌 5
相关推荐
new,delete和指针
new,delete和指针实例讲解
C++里 数组new 和delete问题
<br />//C++里 数组new 和delete问题 //对于数组new的不同方式 和不同的释放方法 //---------------------------------------------------------------- // 创建字符指针数组 char **parr = new char*[100]; //注意这里是**parr // 释放各个字符数组 for (int i =0; i < 100; i++) delete []
C++中new和delete的介绍
今天小编就为大家分享一篇关于C++中new和delete的介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
C++动态内存分配(new/new[]和delete/delete[])详解
主要介绍了C++动态内存分配(new/new[]和delete/delete[])详解的相关资料,需要的朋友可以参考下
C++ 使用new与delete需注意的原则
C++的动态内存管理是通过new和delete两个操作来完成的,即用new来申请空间,用delete来释放空间。在使用new和delete时,注意以下原则。 1.new与delete需一一对应 用new操作申请空间,如果申请成功,必须在以后的某个时刻用delete释放该空间,既不能忘记释放,也不能多次释放。前者会引起内存泄露,后者会引起运行时错误。如下面的程序。 #include <iostream> using namespace std; int main() { int *p; p=new int(3); if(p) { delete p; } delete p; r


