c -指针到数组,malloc和越界访问



在C语言中给定一个指向数组的指针,我们是否可以为它分配足够的内存来存储额外的元素(超出指定的数组大小),然后使用[]操作符或指针算术安全地访问这些元素?

考虑这个例子:

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( "%dn", *( *foo + 15 ) ); //Prints 100
printf( "%dn", (*foo)[ 16 ] ); //Prints 200

这段代码在gcc中可以很好地编译并产生正确的结果。但是,我不确定它是否调用了未定义行为。

谢谢!

你正在做的事情会触发未定义行为,因为你正在读取/写入超过大小为10的int数组的边界。

访问该内存的正确方法是使用2D数组访问。所以不用这个:

(*foo)[15] = 100;

等于:

foo[0][15] = 100;

这样做:

foo[1][5] = 100;

我将以不同的方式分配它:

foo = malloc( sizeof( *foo ) * nrows );

它将分配具有10列和nrows行的2D数组。

访问数组的最好方法是使用索引
foo[row][column]

相关内容

  • 没有找到相关文章

最新更新