Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
684 views
in Technique[技术] by (71.8m points)

c - How do I dynamically allocate a 2d array of chars?

I want to dynamically allocate a 2d array to store strings.

I originally declared the array like this:

char lines[numlines][maxlinelength];

This however gives me a stack overflow when numlines is very huge.

How can I dynamically allocate it to prevent stack overflow?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Use a pointer to an array:

#define maxlinelength 10
char (*lines)[maxlinelength] = malloc( sizeof( char[maxlinelength] ) * numlines ) ;
lines[0][0] = 'A' ;

This requires that the inner most size, maxlinelength, is constant.

You can avoid this limitation if you use pointers to variable-length arrays in which case the syntax remains the same and maxlinelength doesn't have to be a constant. Standards that supports this feature, are C99 and optionally C11.

( A constant is a variable whose value is known at compile time.)

( And to clarify: sizeof( *lines ) is identical to sizeof( char[maxlinelength] ) )


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...