Could C be a hoax? You might wonder, if you look at the many ways to get screwed by C.
C++ has many weaknesses, too. Compiler writers express their doubts implementing the holes in ANSI C++. See Reflections on Trusting Trust, by Ken Thompson, and Go To Statement Considered Harmful, by Edsger W. Dijkstra.
The malloc function has many problems, but some of them can be non-trivial to fix. Still, there are free and commercial garbage collectors available, plus diagnostic tools for locating errors that can only be detected at runtime. One of them is that malloc can return NULL, so always remember to check for this!
However, manual control of memory management can still have performance problems. One reason for this could poor choice of allocation algorithms, but a more fundamental problem is that memory in computers is heiarchial. This means that it won't always behave in the way you expect, making access to one bit of memory more expensive than another, perhaps by several orders of magnitude. It can also be hard to allocate memory in a constant time, which might be needed for real time code.
C encourages programmers to use machne-dependant file formats. See C's data types; was: Re: Y2K and C (Sapovits, ISKS-19.38) for a typical example.
What are you going to do in a C program if you get a bounds check exception? C doesn't have an exception model. You can exit the program, but a lot of people are going to scream about that. You could use a compiler like Safe-C, but without the performance problems. You could use a language that generates an exception when a subscript is out of range, like Java.
Other problems include an ambigious grammar. See Jerry Leichter's comments on reserved words, in comp.compilers.
"C is good enough to stand on its own merits without people telling
lies about it."
Richard A. O'Keefe