0

C で配列へのポインターが与えられた場合、余分な要素 (指定された配列サイズを超える) に対して十分なメモリをそれに malloc し、[] 演算子またはポインター演算のいずれかを使用してそれらの要素に安全にアクセスできますか?

次の例を検討してください。

int (*foo)[ 10 ]; //Declare pointer to array of ten ints
foo = malloc( sizeof( int ) * 20 ); //Allocate memory for TWENTY ints
(*foo)[ 15 ] = 100; //Access element in "extra" space via [] operator 
*( *foo + 16 ) = 200; //Access element in "extra" space via pointer arithmetic
printf( "%d\n", *( *foo + 15 ) ); //Prints 100
printf( "%d\n", (*foo)[ 16 ] ); //Prints 200

このコードは正常にコンパイルされ、gcc で正しい結果が生成されます。ただし、未定義の動作が発生するかどうかはわかりません。

ありがとう!

4

2 に答える 2