> I don't use TAB because Vim already does it for me.....
Then set it to use 4 spaces, not one TAB character.
Whether you physically press the tab key is irrelevant, there are tab chars in your code, and it looks a mess posted here.

> I think arg_list[0] = "mpg321" is ok as long as this pointer does not deal with NULL.
Wrong - you can only delete what you got with new
Since "mpg321" isn't from new, then delete will likely barf all over you.

I suggest you use opendir() readdir() closedir() for getting directory listings.

Hard to say what is wrong with your two examples, since neither compiles, and its too short to guess the context in which they're being used.
In any event, you should really specify the full path to the name of the program being run "/bin/ls" instead of just "ls"