As other answers explains that you are accessing array out of bound and you are assigning address whose scope is only till the for loop.
Coming to the main part of question "why my array of pointers "lines" doesn't have any of it's addresses changed when a "line" address is assigned to it. Why isn't that assignment working?"
Here even if you correct you index value as "lines[i]=line;", it wouldn't work as you are assigning same address to each character pointers. This is because "line" is a character array and name of the character array always points to the base of array.
Try out this if your just trying to see assignment operation.
int main(){
char *lines[MAX_LINES];
char line[MAX_LINES];
for(int i=0;i<MAX_LINES;i++)
{
lines[i]=&line[i];
}