程序为什么会core

chxime 2012-06-06 10:11:07
给字符型指针赋值为什么会core掉啊,请高手指点,代码如下:
定义结构体:

typedef struct _TDataSet
{
char name[MAX_DATASET_NAME_LEN + 1];
char refer[MAX_PATH_LEN + 1];
int nVarNum;
char **szVar;
_TDataTreeNode **pVarNode;

char *desc;

DWORD dwData[3];

_TDataSet *pPrev;
_TDataSet *pNext; /*下一个数据集*/
} TDataSet;

然后在函数内:
TDataSet *pDataSet;
pDataSet=DT_GetFreeDataSet();
if (pDataSet == NULL)
return FALSE;
char *aa = (char *)(p+(MAX_VAR_NAME_LEN+1));
pDataSet->szVar[0] = aa;
在最后一行的时候给字符指针赋值程序core掉,不知道为什么啊,我打印了aa的值是正常的啊,aa的值为0xeaaf65d,请高手指点下为什么程序会core掉
...全文
170 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
chxime 2012-06-06
  • 打赏
  • 举报
回复
在core里打印了:print pDataSet->szVar,结果显示为$1 = (char **) 0xeabdb3d,证明分配内存了啊,而且在alpha机器上能运行的,在hp-ux上就不行
赵4老师 2012-06-06
  • 打赏
  • 举报
回复
Windows:崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。

Linux:进程意外退出会在当前目录下产生形如‘core.数字’的文件比如‘core.1234’
使用命令
gdb 运行程序名 core.数字
进入gdb然后使用bt命令
可以查看进程意外退出前函数调用的堆栈

赵4老师 2012-06-06
  • 打赏
  • 举报
回复
仅供参考
//在堆中开辟一个4×5的二维int数组
#include <stdio.h>
#include <malloc.h>
int **p;
int i,j;
void main() {
p=(int **)malloc(4*sizeof(int *));
if (NULL==p) return;
for (i=0;i<4;i++) {
p[i]=(int *)malloc(5*sizeof(int));
if (NULL==p[i]) return;
}
for (i=0;i<4;i++) {
for (j=0;j<5;j++) {
p[i][j]=i*5+j;
}
}
for (i=0;i<4;i++) {
for (j=0;j<5;j++) {
printf(" %2d",p[i][j]);
}
printf("\n");
}
for (i=0;i<4;i++) {
free(p[i]);
}
free(p);
}
// 0 1 2 3 4
// 5 6 7 8 9
// 10 11 12 13 14
// 15 16 17 18 19
txwd0033 2012-06-06
  • 打赏
  • 举报
回复
不懂。。。
qq120848369 2012-06-06
  • 打赏
  • 举报
回复
szVar分配过内存是不会core的。
chxime 2012-06-06
  • 打赏
  • 举报
回复
分配了,pDataSet=DT_GetFreeDataSet();在这句话里分配的
ouyh12345 2012-06-06
  • 打赏
  • 举报
回复
szVar是char **,分配内存了没?

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧