【发布时间】:2016-01-10 20:22:11
【问题描述】:
是否可以使用 sizeof 运算符而不是索引和“标准”指针算法来动态分配和初始化(和释放)矩阵(或其他多维数组)?
我试过了:
#include <stdio.h>
#include <stdlib.h>
#define ROWS 3
#define COLUMNS 4
int main(void)
{
int i, j;
char **v;
if((v = malloc(ROWS*sizeof(char*)))==NULL)
return -1;
for(i=0; i<ROWS; i++)
{
if((*(v + i * sizeof(char*)) = malloc(COLUMNS * sizeof(char)))==NULL)
return -2;
}
for(i=0; i<ROWS; i++)
{
for(j=0; j<COLUMNS; j++)
{
*(*(v + i * sizeof(char*)) + j * sizeof(char)) = 'a' + i * COLUMNS + j;
printf("%c",*(*(v + i * sizeof(char*)) + j * sizeof(char)));
}
}
for(i=0; i<ROWS; i++)
{
free(*(v + i * COLUMNS * sizeof(char)));
}
free(v);
return 0;
}
但它会生成核心转储(第 24 行的 SIGSEGV (v[1][0]))。我相信问题出在分配上(可能分配给 v[1], v[2]... v[ROWS] malloc 会写入第一次分配的内存)。究竟是什么问题?
谢谢。
【问题讨论】: