我知道对于单维数组 x=a[i]来说相当于x=*(a+i),但是如何使用指针访问二维数组的元素呢?
我有一段由一位非常老的学校程序员编写的代码:-).它就是这样的
typedef struct ts_request
{
ts_request_buffer_header_def header;
char package[1];
} ts_request_def;
ts_request_def* request_buffer =
malloc(sizeof(ts_request_def) + (2 * 1024 * 1024));
Run Code Online (Sandbox Code Playgroud)
程序员基本上正在研究缓冲区溢出概念.我知道代码看起来很狡猾.所以我的问题是:
malloc总是分配连续的内存块吗?因为在这段代码中如果块不连续,代码将失败很长时间
执行free(request_buffer),它将释放malloc分配的所有字节,即sizeof(ts_request_def)+(2*1024*1024),或者只释放结构sizeof(ts_request_def)大小的字节
你是否看到这种方法有任何明显的问题,我需要与老板讨论这个问题,并想指出这种方法有任何漏洞
我创建了一个二维数组,其内容如下
int i,j,lx,ly;// lx,ly are the row and column respectively
double** a;
a=(double**) malloc((lx+2)*sizeof(double));
a[0]= (double*) malloc((lx+2)*(ly+2)* sizeof(double));
assert(a[0]);
for(i=1;i<lx+2;i++)
{
a[i]=a[i-1]+i*(ly+2);
}
Run Code Online (Sandbox Code Playgroud)
// 我为这个数组中的所有元素分配了一个值 0,如下所示
for(i=0;i<(lx+2)*(ly+2);i++)
{
a[i]=0;
}
Run Code Online (Sandbox Code Playgroud)
// 我打印出下面的所有元素
for(i=0;i<(lx+2)*(ly+2);i++)
{
printf("position %d values %d\n",i,a[i]);
}
Run Code Online (Sandbox Code Playgroud)
// 当我看到输出时,它向我显示了一个特定位置 13 处的垃圾值。我无法弄清楚。还请告诉我如何访问行和列,如 Eg 以访问第 7 列第 0 行和第 5 行就 lx 而言,第 6 列列,如我的代码所示