• Log InLog In
  • Register
Liquid`
Team Liquid Liquipedia
EDT 11:28
CEST 17:28
KST 00:28
  • Home
  • Forum
  • Calendar
  • Streams
  • Liquipedia
  • Features
  • Store
  • EPT
  • TL+
  • StarCraft 2
  • Brood War
  • Smash
  • Heroes
  • Counter-Strike
  • Overwatch
  • Liquibet
  • Fantasy StarCraft
  • TLPD
  • StarCraft 2
  • Brood War
  • Blogs
Forum Sidebar
Events/Features
News
Featured News
Serral wins HomeStory Cup 2914Serral wins Maestros of the Game 243ByuL, and the Limitations of Standard Play3Team Liquid Map Contest #22: Results and Winners7Code S Season 2 (2026): RO4 and Finals Preview12
Community News
Weekly Cups (July 27-Aug 2): SHIN's big week0SC4ALL II: Brood War - $2500 - Dec 5-68SC4ALL II announced - $10,000 prize pool, Dec 5-64PIG STY FESTIVAL 8.0! (13 - 23 August)11Neeb returns to progaming; rejoins ONSYDE18
StarCraft 2
General
StarCraft 2 at SC4ALL II Invite #3/8 - Clem Balance hotfix patch 5.0.16b (July 16) Clem: "I don't have that much hope in Blizzard" Geoff 'iNcontroL' Robinson has passed away Neeb returns to progaming; rejoins ONSYDE
Tourneys
Tasteless Time Warp: SC Evo Showmatch (May 25) SC4ALL II announced - $10,000 prize pool, Dec 5-6 Sparkling Tuna Cup - Weekly Open Tournament PIG STY FESTIVAL 8.0! (13 - 23 August) RSL Revival: Season 6 - Qualifiers and Main Event
Strategy
[G] Having the right mentality to improve
Custom Maps
Nexus Wars 2021 GUIDE [M] (2) Industrial Park
External Content
The PondCast: SC2 News & Results Mutation # 537 Hostile Territory Mutation # 536 Railroad Switch Mutation # 535 Assembly of Vengeance
Brood War
General
Making an Online Broodwar Manager Game ASL22 General Discussion [Personal Project Share] Terran Defense v0.60 Data needed BGH Auto Balance -> http://bghmmr.eu/
Tourneys
SC4ALL II: Brood War - $2500 - Dec 5-6 KCM Race Survival 2026 Season 3 [Megathread] Daily Proleagues 2v2v2v2 Tournament
Strategy
Any training maps people recommend? Fighting Spirit mining rates Simple Questions, Simple Answers Odyssey Mineral Stack Saturation
Other Games
General Games
Stormgate/Frost Giant Megathread General RTS Discussion Thread Nintendo Switch Thread ZeroSpace Early Access is Now Live! Beyond All Reason
Dota 2
Looking for a Dota Mentor Official 'what is Dota anymore' discussion
League of Legends
[TL LoL EUW IHs] Teemo shall perish TSM pausing esports and CLG Dead
Heroes of the Storm
Heroes of the Storm 2.0
Hearthstone
Deck construction bug
TL Mafia
TL Mafia Power Rank TL Mafia Community Thread NeO.D_StephenKing vs This Guy From 1 Million Dance
Community
General
US Politics Mega-thread European Politico-economics QA Mega-thread The Games Industry And ATVI Russo-Ukrainian War Thread Artificial Intelligence Thread
Fan Clubs
The Clem Fan Club INnoVation Fan Club The Scarlett Fan Club
Media & Entertainment
Anime Discussion Thread Movie Discussion! Series you have seen recently... [Req][Books] Good Fantasy/SciFi books
Sports
Football (Soccer) Thread TeamLiquid Health and Fitness Initiative For 2023 Formula 1 Discussion MLB/Baseball 2023 McBoner: A hockey love story
World Cup 2022
Tech Support
Computer Build, Upgrade & Buying Resource Thread Simple Questions Simple Answers FPS when play League Of Legend on laptop
TL Community
The Automated Ban List Northern Ireland Global Starcraft
Blogs
Please support my new stand…
Peanutsc
What is a Gamer?
TrAiDoS
Hello guys!
LIN1s
ASL S22 English Commentary…
namkraft
Poker (part 2)
Nebuchad
Customize Sidebar...

Website Feedback

Closed Threads



Active: 5234 users

C++ dynamic objects

Blogs > Freezard
Post a Reply
1 2 Next All
Freezard
Profile Blog Joined April 2007
Sweden1027 Posts
October 13 2010 12:37 GMT
#1
My teacher keeps on saying this is wrong although it works fine for me. He says that after I delete queue, the local queue pointer will be assigned the address of the new Queue-object and it won't be returned to Main and the original queue pointer because it's a copy.

But when I test it it does, both pointers have the same address all the time according to VS debug and I also see the capacity changes. My teacher told me to return the "copy" pointer from the function (queue = newQueue(queue)) which I tried and it did exactly the same thing.

Queue *queue = new Queue; //default capacity 10
newQueue(queue);

void newQueue(Queue *queue){
...
cin >> capacity;
delete queue;
queue = new Queue(capacity);
}

*
spinesheath
Profile Blog Joined June 2009
Germany8679 Posts
Last Edited: 2010-10-13 12:50:14
October 13 2010 12:48 GMT
#2
Well, he's right. You are assigning to a local pointer. Maybe VS does some magic so it works (like inlining since it's such a small function? Then again there should be no inlining in debug...).

You could use a reference to a Queue * as function argument. That way you would assign to the original pointer.
If you have a good reason to disagree with the above, please tell me. Thank you.
georgir
Profile Joined May 2009
Bulgaria253 Posts
October 13 2010 13:09 GMT
#3
It works in your case for one simple reason - the second time you create the object, it gets created at the same memory address as the first time, because that first object got deleted and the memory got released. Pure coincidence, in other words.
In general, this will not work. Test by commenting out the delete.
Mumblee
Profile Blog Joined May 2009
Canada256 Posts
October 13 2010 13:09 GMT
#4
Just because it works by accident (which could be for any number of reasons) doesn't mean you should do it.

My guess would be that your heap is allocating the new Queue where the old queue was deleted from.


outer_queue = new Queue //allocates memory at location X, constructs a queue object on top
newQueue(outer_queue)

void (newQueue* inner_queue)
{
delete inner_queue; //delete destructs the object at location X and allows the memory at
// X to be reused. inner_queue and outer_queue both still point at X
inner_queue = new Queue(capacitiy) //allocates memory at location X (because it was
// the most recently free'd block of memory) and
// constructs the new queue
}


Both inner_queue and outer_queue point at X, which is a valid object.

You got away with murder because your allocator just happened to allocate the new object at the same spot. If your allocator behaved differently and allocated the second Queue object at Y, inner_queue would point at Y and outer_queue would point at X, where X is no longer a valid Queue object.

TossFloss *
Profile Blog Joined February 2010
Canada606 Posts
October 13 2010 13:38 GMT
#5
Your teacher should ditch C++. >_< This makes me rage so much. Bloated OOP languages do not make good educational language for first time programmers.

Anyways, your teacher is right. Your code just happens to work in this particular instance.

Here's what you need to understand.
Queue * queue is a pointer to an object of type Queue.

Pointers and memory are not magical like crappy C++ makes them look. They are a number which points to an address in memory. The variable queue merely stores a number (e.g. 283840).

Let's break this down:

The type of variable---> Queue *<-- tells you this is a pointer queue <--- the name of your variable

Maybe you're wondering why we need to declare the type of variable queue stores i.e. what's up with the Queue in Queue *. Well we don't need to (more below). It's a nice feature called type checking which tries to make sure that when you compile your code you didn't accidentally think a queue object was a frog object and get them mixed up and then run code blocks like queue->jump(); queue->croak() and have your code crash terribly during runtime. Instead it spit out a nice compiler error.

However, you can shoot yourself in the foot like this:
void * queue
void * lets you make a pointer which can point to anything even a Frog.

Now let's go to the next important magical keyword in the C++ language. The magic new keyword.

new Queue;

This says to the operating system: Give me a chunk of memory large enough to fit a queue. Then the operating tries to allocate that much memory and gives you a memory address pointing to your memory.

Imagine that you are Miley Cyrus and your family has hundreds of fancy cars/vans/trucks - way too many for Miley's brain to keep track of. Some vehicles aren't available because they are being used, re-styled or someone like me stole them. So you being Miley Cyrus have a party with 6 other people that all need to fit into a car. So you need a vehicle for 7 people. You go to your butler and say "I need a vehicle that will fit exactly 7 people". He gives you the keys and parking spot number of such a vehicle. Your butler's like an OS and that parking spot number/keys is like a memory address.

Of course the OS might have no memory to give you (or might be really greedy and want to keep it all for itself) in which case it will tell you to gtfo. But this will probably never happen in any of your courses.

Please remember that the new keyword requests a fixed size of memory WHICH is known at compile time. You know how much memory is needed for a Queue object (your compiler does). Say your Queue object is a monster and takes up 256 bytes. Then new Queue is like saying: Operating System please set aside 256 bytes for my own personal use and give me the memory address.

So why does your code work? Because for some fluke of luck the queue you create in the newQueue function has the same memory address as the queue you deleted. If you wanna make it break: remove the delete queue line.
TL Android App Open Source http://www.teamliquid.net/forum/viewmessage.php?topic_id=265090
Frigo
Profile Joined August 2009
Hungary1023 Posts
Last Edited: 2010-10-13 14:06:28
October 13 2010 13:58 GMT
#6
You could use a reference to a pointer instead of a plain pointer in the parameters: void newQueue(Queue*& queue){...}. Or you can return a Queue* from your function: Queue* newQueue(Queue* oldqueue){...}; so that you can do q = newQueue(q) stuff.
Then it will modify the pointer. Obviously the way it is now, it does not.

Also, your code is rather fishy, use a constructor with std::istream& as parameter, or an operator >> to read from std::in; then all you need to do if you want to use it:

Queue q(std::in);
or
Queue* q = new Queue(std::in);
or
Queue q;
std::cin >> q;
or
Queue* q = new Queue();
std::cin >> (*q);
depending on how you want to use it.

I recommend you implement it with std::list (or std::vector for stack), that way you can easily insert/delete/resize without screwing around with pointers.
http://www.fimfiction.net/user/Treasure_Chest
tofucake
Profile Blog Joined October 2009
Hyrule19234 Posts
October 13 2010 14:17 GMT
#7
Put another variable declaration between the delete and instantiation, otherwise you'll get the first available address (the one you just cleared). Not hard to follow.
Liquipediaasante sana squash banana
Shenghi
Profile Joined August 2010
167 Posts
Last Edited: 2010-10-13 14:48:54
October 13 2010 14:41 GMT
#8
I am assuming that the OP is forced to use a queue by their teacher. Having said that, I agree that C++ should not be taught as a first language.

The reason it works is purely coincidental. I am inclined to agree with georgir and Mumblee that the reason it works in this particular case is that coincidentally the new Queue is created at the same memory address as the old one. There are three solutions:

1) Your teacher is right. Returning the local pointer and assigning that value would work.

Queue* q = new Queue();
q = newQueue(q);

Queue* newQueue(Queue* q)
{
/*
...snip...
*/
cin >> c;
delete q;
q = 0;
q = new Queue(c);
return q;
}

2) The C way. Pass a pointer to a pointer.

Queue* q = new Queue();
newQueue(&q);

void newQueue(Queue** q)
{
/*
...snip...
*/
Queue * ptr = (*q); // More readable
cin >> c;
delete ptr;
ptr = new Queue(c);
}

3) The C++ way, that has already been mentioned before: Pass a reference.

Queue* q = new Queue();
newQueue(q);

void newQueue(Queue&* q)
{
/*
...snip...
*/
cin >> c;
delete q;
q = new Queue(c);
}


Now since you obviously don't quite grasp the concept of pointers and passing by value yet, I would advise to go with the method your teacher suggest. In the end though it's a matter of style. Whichever way you decide to go with, make sure you understand what's happening and be consistent.

Having said all that, it horrifies me that your teacher is teaching you to delete an input parameter in a function that, by name, is claiming to create something. Please call the thing something along the lines of replaceQueue(...)
People are not born stupid, they choose to be stupid. If you made that choice, please change your mind.
Freezard
Profile Blog Joined April 2007
Sweden1027 Posts
October 13 2010 14:49 GMT
#9
Alright thanks guys, I understand the problem now. I used a return like teacher told me to and it's all good.

TossFloss: ROFL dude, I wish I had a teacher like you instead, you're funny and way better at explaining :D

I'm not a newbie to programming, I'm soon done with my 3 years CS program. However I'm newbie to C++ OOP and just read a introduction C++ course before this one. I know Java/C# OOP well but could never imagine something as easy as making a new object from an old would cause so many problems in C++. I'm used to memory management being all automatic... anyway thanks once again and I hope one day I won't be scared of pointers and instead find them useful!
Shenghi
Profile Joined August 2010
167 Posts
October 13 2010 15:02 GMT
#10
On October 13 2010 23:49 Freezard wrote:
Alright thanks guys, I understand the problem now. I used a return like teacher told me to and it's all good.

TossFloss: ROFL dude, I wish I had a teacher like you instead, you're funny and way better at explaining :D

I'm not a newbie to programming, I'm soon done with my 3 years CS program. However I'm newbie to C++ OOP and just read a introduction C++ course before this one. I know Java/C# OOP well but could never imagine something as easy as making a new object from an old would cause so many problems in C++. I'm used to memory management being all automatic... anyway thanks once again and I hope one day I won't be scared of pointers and instead find them useful!

The danger of switching from managed languages like Java and C# to C or C++ -- a danger your teacher should be aware of and should hammer on right from the start! -- is that these languages implicitly pass parameters by reference, and not by value. In a managed language your code would be correct because of this.

IN C AND C++ ALL PARAMETERS ARE COPIES OF WHAT YOU PASS!

If you pass an object, the function gets a copy of it. If you pass a pointer to an object, the function gets a copy of the pointer. References, even in C++, are a fancy way of hiding this. While that's nice and could most certainly make code more readable (especially in situations like these where you start having to use pointers to pointers) it can also be destructive if you don't understand what you're doing.
People are not born stupid, they choose to be stupid. If you made that choice, please change your mind.
Uranium
Profile Blog Joined May 2010
United States1077 Posts
October 13 2010 16:07 GMT
#11
On October 13 2010 22:38 TossFloss wrote:
Your teacher should ditch C++. >_< This makes me rage so much. Bloated OOP languages do not make good educational language for first time programmers..

What language would you prefer?

I learned C as my first language, followed by C++ and I feel like it's given me a better understanding of the hardware/software interaction than say Python or Java. Of course I am a computer engineer so I care about details (and speed!).
"Sentry imba! You see? YOU SEE??!!" - Sen | "Marauder die die!" - oGsMC | "Oh my god, she texted me back!" - Day[9]
Uranium
Profile Blog Joined May 2010
United States1077 Posts
Last Edited: 2010-10-13 16:10:52
October 13 2010 16:10 GMT
#12
On October 13 2010 23:41 Shenghi wrote:
3) The C++ way, that has already been mentioned before: Pass a reference.

Queue* q = new Queue();
newQueue(q);

void newQueue(Queue&* q)
{
/*
...snip...
*/
cin >> c;
delete q;
q = new Queue(c);
}

mind = blown I did not know you could reference a pointer.
"Sentry imba! You see? YOU SEE??!!" - Sen | "Marauder die die!" - oGsMC | "Oh my god, she texted me back!" - Day[9]
Uranium
Profile Blog Joined May 2010
United States1077 Posts
Last Edited: 2010-10-13 16:13:31
October 13 2010 16:13 GMT
#13
Also WHY are you doing it this way? You are essentially creating an object and then immediately destroying it to create another object?. You could just skip that step and just do

cin << cap;
Queue* q = new Queue(cap);

Unless of course this is just an intellectual exercise.
"Sentry imba! You see? YOU SEE??!!" - Sen | "Marauder die die!" - oGsMC | "Oh my god, she texted me back!" - Day[9]
NicolBolas
Profile Blog Joined March 2009
United States1388 Posts
October 13 2010 16:32 GMT
#14
Also, your code is rather fishy, use a constructor with std::istream& as parameter, or an operator >> to read from std::in; then all you need to do if you want to use it:


Ewww. That's awful coding practice. What if you wanted to create the object from a capacity value that wasn't pulled from a std:istream? Maybe something you compute based on the time of day? Or something else?

Object constructors should take the bare minimum necessary to build a working object of that type. No more. It places a dependency between that object and std::istream that is entirely unnecessary.
So you know, cats are interesting. They are kind of like girls. If they come up and talk to you, it's great. But if you try to talk to them, it doesn't always go so well. - Shigeru Miyamoto
Shenghi
Profile Joined August 2010
167 Posts
Last Edited: 2010-10-13 16:53:59
October 13 2010 16:47 GMT
#15
On October 14 2010 01:10 Uranium wrote:
Show nested quote +
On October 13 2010 23:41 Shenghi wrote:
3) The C++ way, that has already been mentioned before: Pass a reference.

Queue* q = new Queue();
newQueue(q);

void newQueue(Queue&* q)
{
/*
...snip...
*/
cin >> c;
delete q;
q = new Queue(c);
}

mind = blown I did not know you could reference a pointer.

You can, but it's not a very nice thing to do usually. It certainly wouldn't be my option of choice. But in the end a pointer is just a 4-byte (x86) value that can be passed like anything else, which includes passing by reference.

And to answer the which language first question: Java or C# like the OP apparently did get first would be fine. Not all of us grew up in an age where these were non-existent, or where it was vital for every programmer to understand the underlying architecture. In this day and age, however, it can give quite the edge as most CS graduates never really learn the lower level languages.

I personally did learn C as a first language and then C++, but I taught myself. A couple years late, I'm now attending uni and see how many problems other students have with Java already. If C or C++ was the first language they learned then even more people would fail.
People are not born stupid, they choose to be stupid. If you made that choice, please change your mind.
TossFloss *
Profile Blog Joined February 2010
Canada606 Posts
Last Edited: 2010-10-13 17:12:18
October 13 2010 17:03 GMT
#16
On October 14 2010 01:07 Uranium wrote:
Show nested quote +
On October 13 2010 22:38 TossFloss wrote:
Your teacher should ditch C++. >_< This makes me rage so much. Bloated OOP languages do not make good educational language for first time programmers..

What language would you prefer?

I learned C as my first language, followed by C++ and I feel like it's given me a better understanding of the hardware/software interaction than say Python or Java. Of course I am a computer engineer so I care about details (and speed!).


Straight up C with K&R as the course text.

And to answer the which language first question: Java or C# like the OP apparently did get first would be fine. Not all of us grew up in an age where these were non-existent, or where it was vital for every programmer to understand the underlying architecture. In this day and age, however, it can give quite the edge as most CS graduates never really learn the lower level languages.


If I interview a CS graduate who doesn't understand memory allocation after four years of supposed education, they do not get the job. Too many programmers possess zero knowledge of how their program allocate and reference memory, and consequently their programs are slow, bloated and buggy.
TL Android App Open Source http://www.teamliquid.net/forum/viewmessage.php?topic_id=265090
waxypants
Profile Blog Joined September 2009
United States479 Posts
Last Edited: 2010-10-13 17:05:36
October 13 2010 17:04 GMT
#17
On October 14 2010 01:47 Shenghi wrote:
Show nested quote +
On October 14 2010 01:10 Uranium wrote:
On October 13 2010 23:41 Shenghi wrote:
3) The C++ way, that has already been mentioned before: Pass a reference.

Queue* q = new Queue();
newQueue(q);

void newQueue(Queue&* q)
{
/*
...snip...
*/
cin >> c;
delete q;
q = new Queue(c);
}

mind = blown I did not know you could reference a pointer.

You can, but it's not a very nice thing to do usually. It certainly wouldn't be my option of choice. But in the end a pointer is just a 4-byte (x86) value that can be passed like anything else, which includes passing by reference.

And to answer the which language first question: Java or C# like the OP apparently did get first would be fine. Not all of us grew up in an age where these were non-existent, or where it was vital for every programmer to understand the underlying architecture. In this day and age, however, it can give quite the edge as most CS graduates never really learn the lower level languages.

I personally did learn C as a first language and then C++, but I taught myself. A couple years late, I'm now attending uni and see how many problems other students have with Java already. If C or C++ was the first language they learned then even more people would fail.


Meh I think building up from the basics of C is much better than trying to come down to the basics after learning a higher level language such as Java. People who start at Java and try to go down any lower really have no idea of what is going on underneath their code. When you peel off the layers of abstraction that Java adds, there is nothing left for those guys. Someone who knows C can easily bump up to a higher level language like C++ or Java.
dvide
Profile Joined March 2010
United Kingdom287 Posts
October 13 2010 17:15 GMT
#18
Best option would be to implement The Big Three properly and then just create your Queue objects on the stack. There is probably no reason for them to be on the heap for you. If you want a factory convenience function just return it by value. Your compiler will perform return value optimization (RVO).


Queue createQueue()
{
...
std::cin >> capacity;
return Queue(capacity);
}

Queue queue; // default capacity 10
...
queue = createQueue();


More simples.
TossFloss *
Profile Blog Joined February 2010
Canada606 Posts
Last Edited: 2010-10-13 17:26:24
October 13 2010 17:19 GMT
#19
On October 14 2010 02:04 waxypants wrote:
Show nested quote +
On October 14 2010 01:47 Shenghi wrote:
On October 14 2010 01:10 Uranium wrote:
On October 13 2010 23:41 Shenghi wrote:
3) The C++ way, that has already been mentioned before: Pass a reference.

Queue* q = new Queue();
newQueue(q);

void newQueue(Queue&* q)
{
/*
...snip...
*/
cin >> c;
delete q;
q = new Queue(c);
}

mind = blown I did not know you could reference a pointer.

You can, but it's not a very nice thing to do usually. It certainly wouldn't be my option of choice. But in the end a pointer is just a 4-byte (x86) value that can be passed like anything else, which includes passing by reference.

And to answer the which language first question: Java or C# like the OP apparently did get first would be fine. Not all of us grew up in an age where these were non-existent, or where it was vital for every programmer to understand the underlying architecture. In this day and age, however, it can give quite the edge as most CS graduates never really learn the lower level languages.

I personally did learn C as a first language and then C++, but I taught myself. A couple years late, I'm now attending uni and see how many problems other students have with Java already. If C or C++ was the first language they learned then even more people would fail.


Meh I think building up from the basics of C is much better than trying to come down to the basics after learning a higher level language such as Java. People who start at Java and try to go down any lower really have no idea of what is going on underneath their code. When you peel off the layers of abstraction that Java adds, there is nothing left for those guys. Someone who knows C can easily bump up to a higher level language like C++ or Java.


My other issue with C++ is that it's bloated with keywords and higher-level concepts.

For example, a new learner get beffedudled keeping of tracking of: what's this namespace thing and why do I care; what's up with these magic << and >> operators; how do I make sense of objects; so I can functions with objects and functions without objects; constructors and destructors; class variables.

At the same time they have to figure out the building blocks of programs (for, while, if, else, char, int, array, ...) and language syntax. And really it's too much information to absorb and digest.

As a reference: here's a list of C++ keywords contrast to the list of C keywords.
TL Android App Open Source http://www.teamliquid.net/forum/viewmessage.php?topic_id=265090
Manit0u
Profile Blog Joined August 2004
Poland17821 Posts
October 13 2010 17:34 GMT
#20
Heh, the very first programming language I had to learn was Turbo Pascal Man I hated this shit...
Time is precious. Waste it wisely.
1 2 Next All
Please log in or register to reply.
Live Events Refresh
Next event in 8h 32m
[ Submit Event ]
Live Streams
Refresh
StarCraft 2
PiGStarcraft588
ProTech75
StarCraft: Brood War
Britney 34767
Shuttle 3702
firebathero 686
Soma 478
BeSt 301
Rush 280
Stork 211
Dewaltoss 124
Snow 122
Mong 90
[ Show more ]
Larva 86
Barracks 80
Hyun 58
JulyZerg 35
soO 33
Bale 30
Sharp 25
zelot 24
NaDa 18
sSak 18
HiyA 18
IntoTheRainbow 13
ajuk12(nOOB) 12
Sexy 12
Terrorterran 5
Dota 2
qojqva1372
League of Legends
Grubby3123
Counter-Strike
x6flipin667
fl0m157
Super Smash Bros
Mew2King100
Heroes of the Storm
Khaldor110
Other Games
singsing1799
FrodaN793
Beastyqt552
B2W.Neo402
ceh9239
Liquid`VortiX161
XaKoH 154
ArmadaUGS81
Trikslyr35
Organizations
StarCraft: Brood War
lovetv 13
StarCraft 2
Blizzard YouTube
StarCraft: Brood War
BSLTrovo
[ Show 15 non-featured ]
StarCraft 2
• mYiSmile127
• Shameless 27
• AfreecaTV YouTube
• intothetv
• Kozan
• IndyKCrew
• LaughNgamezSOOP
• Migwel
• sooper7s
StarCraft: Brood War
• BSLYoutube
• STPLYoutube
• ZZZeroYoutube
League of Legends
• Nemesis2597
• TFBlade656
Other Games
• Shiphtur39
Upcoming Events
Replay Cast
8h 32m
Escore
18h 32m
IntoTheTV X SOOP
19h 32m
RSL Revival
1d 17h
herO vs SHIN
Clem vs Solar
Serral vs Rogue
Ladder Legends
2 days
Ladder Legends
2 days
RSL Revival
2 days
OSC
2 days
OSC
3 days
WardiTV Weekly
3 days
[ Show More ]
The Patches Monday
4 days
Sparkling Tuna Cup
4 days
PiG Sty Festival
4 days
PiGosaur Cup
5 days
Replay Cast
5 days
Kung Fu Cup
5 days
Replay Cast
6 days
The PondCast
6 days
Liquipedia Results

Completed

Proleague 2026-08-05
CranK Gathers Season 4: BW vs SC2 Team League
Eternal Conflict S2 Finale

Ongoing

KCM Race Survival 2026 Season 3
K-JUNGMAN
Acropolis #5
RSL Revival: Season 6
BLAST Bounty Summer 2026
BLAST Bounty Summer Qual
Stake Ranked Episode 3
XSE Pro League 2026
IEM Cologne Major 2026
Stake Ranked Episode 2
CS Asia Championships 2026

Upcoming

Escore Tournament S3: W6
Escore Tournament S3: W7
CSLAN 4
ASL Season 22
Escore Tournament S3: W8
Acropolis #5 - TRS
Blizzard Classic Cup 2026
HSC XXX
SC4ALL II: StarCraft II
Kung Fu Cup 2026 Grand Finals
PiG Sty Festival 8.0
Big Dog Cup 2026 Div 1
Thunderpick World Champ.
ESL Pro League Season 24
Stake Ranked Episode 4
Logitech G Connect 2026
SL StarSeries Fall 2026
FISSURE Playground #5
BLAST Open Fall 2026
Esports World Cup 2026
Esports World Cup 2026: LCQ
TLPD

1. ByuN
2. TY
3. Dark
4. Solar
5. Stats
6. Nerchio
7. sOs
8. soO
9. INnoVation
10. Elazer
1. Rain
2. Flash
3. EffOrt
4. Last
5. Bisu
6. Soulkey
7. Mini
8. Sharp
Sidebar Settings...

Advertising | Privacy Policy | Terms Of Use | Contact Us

Original banner artwork: Jim Warren
The contents of this webpage are copyright © 2026 TLnet. All Rights Reserved.