1,对于int **matrix使用:
matrix=(int **)malloc(sizeof(int)*N*N);
|
是不对的,将造成地址被当作了一维数组来解析。应该正确使用二维数组的抽象,如:
matrix=(int **)malloc(sizeof(int *)*N);
for(i=0;i<N;i++)
{
matrix[i]=(int *)malloc(sizeof(int)*N);
}
|
2,链表的单元定义:
typedef struct
{
int a;
struct cellT *link;
}cellT;
|
虽然能够工作,但是会给出警告,如:
pointer to incomplete type
这是因为内部的struct关键字表示这个类型会在其后定义,但是struct cellT这个类型没有定义过,所以应该:
typedef struct cellT
{
int a;
struct cellT *link;
}cellT;
|
这样就可以避免警告。
另外,想链表的内存释放工作的完成:
for(cp=cell, np=cp->link; cp!=NULL; cp=np, np=cp->link)
{
free(cp);
}
|
这样存在一个问题,就是最后会有一个np对cp==NULL时的一个地址解析,这样会造成一个运行时错误而终止程序,应该是:
for(cp=cell, np=cp->link; cp!=NULL; cp=np, np=(cp==NULL?NULL, cp->link))
{
free(cp);
}
|
阅读(1129) | 评论(0) | 转发(0) |