proc_info_t *find_top_ten(proc_info_t *pstProcs, int iNum)
{
int i, j, k;
proc_info_t stPtemp;
proc_info_t *pstPtr;
memset(&stPtemp, 0x00, sizeof(stPtemp));
pstPtr = (proc_info_t *)malloc(sizeof(proc_info_t) * 10);
if (pstPtr == NULL)
{
printf("malloc error!\n");
return NULL;
}
memset(pstPtr, 0x00, sizeof(pstPtr));
printf("pstPtr: %d\n", pstPtr);
for (i = 0; i < iNum; i++)
{
for (j = 0; j < 10; j++)
{
if (pstProcs[i].cpu_percent > pstPtr[j].cpu_percent)
{
memset(&stPtemp, 0x00, sizeof(stPtemp));
stPtemp = pstPtr[j];
pstPtr[j] = pstProcs[i];
for (k = 9; k > j + 1; k--)
{
pstPtr[k] = pstPtr[k - 1];
}
pstPtr[j + 1] = stPtemp;
break;
}
}
}
printf("pstPtr: %d\n", pstPtr);
free(pstPtr);
return NULL;
}
打印结果为:
pstPtr: 268481136
pstPtr: 268481136
Memory fault(coredump)
头文件#include 也加了,希望大牛们帮忙看下
---------------问题补充---------------
@天晗:这个程序就是从proc_info_t(自定义的)结构体数组里面找出10个cpu_percent最大的元素。在Linux执行没有问题,在AIX下释放内存的时候就出现段错误,而且pstPtr数组中的内容能读出来,?????????????????(4年前)
@天晗:memset(pstPtr, 0x00, sizeof(pstPtr));应该改为: memset(pstPtr, 0x00, sizeof(proc_info_t) * 10);(4年前)
@天晗:typedef struct { char name[128]; pid_t pid; unsigned long long proc_size; / in bytes / double cpu_percent; double mem_percent; char stat; } proc_info_t;
for (j = 0; j < 10; j++) { ...
pstPtr[j + 1] = stPtemp;
...}
当 j = 9 时 pstPtr[j + 1] 越界了吧
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。