@3run: Thanks for the goodwill to help me. Unfortunately, the situation is something else as you thought.
First of all, two things:
1. No need to use #define PRAGMA_POINTER
2. Although the A8 documentation says: "Empty strings are automatically created." it not helps. You will got the error message.

Here is a short demonstration of how to get W1501 Invalid pointer message. (with 'automatically created strings')
Run this, and you can see the message. Naturally, you don't need to fill the commented part with live code. Popping up the message will work without that.
Code
function main() {
	STRING* actual_line = str_create("");
	TEXT* text_lines;
	text_lines = txt_create(1,0);
	int line_number = 0;
/*
here goes your code that fills the text_lines...
*/
	str_cpy(actual_line, (text_lines->pstring)[line_number]);
	printf("We have valid empty text_line");
}


And, here is a short demonstration of how to get rid of W1501 Invalid pointer message.
Now, you must somehow fill the commented code part with: filling the text lines with strings and accordingly to it to update the correct value of the text_lines->strings.
Code
function main() {
	STRING* actual_line = str_create("");
	TEXT* text_lines;
	text_lines = txt_create(1,0);
	int line_number = 0;
	text_lines.strings = 0;
/*
here goes your code that fills the text_lines...
*/
	if (0 < text_lines->strings && line_number < text_lines->strings) {
		str_cpy(actual_line, (text_lines->pstring)[line_number]);
		printf("We have valid empty/or filled text_line");
	}
}

So, the key of the solution is to set the proper value in text_lines->strings.