读书人

问个内存错误的有关问题

发布时间: 2013-07-16 22:38:05 作者: rapoo

问个内存异常的问题
为什么程序会异常
typedef struct tagA
{
struct tagA *next;
struct tagA *prev;
}TA;

typedef struct tagB
{
int a;
TA *ptA;
}TB;

int main()
{
TB *ptB;
ptB = (TB *)malloc(sizeof(TB));
ptB->ptA->next = NULL;
}

[解决办法]
不会, 分配 ptB 的时候, 只是为 ptA 分配了 4 个字节来放这个指针本身.
但是这个指针指向哪里还得单独分配.

就像你定义变量
TB *ptB;
是, 系统就会为 ptB 分配 4 个字节来存放指针本身, 但是这个指针的指向你还得另外初始化.

你看你的 sizeof(TB) 大小是 8 个字节, 如果里面要包含 a, ptA, next, prev 这些东西, 8 个字节哪里够.

读书人网 >C语言

热点推荐