开发者社区> 问答> 正文

从Linux下移植到AIX下free内存出现了段错误,希望帮忙看下

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;

展开
收起
a123456678 2016-06-12 17:28:50 2170 0
1 条回答
写回答
取消 提交回答
  • for (j = 0; j < 10; j++) { ...
    
    pstPtr[j + 1] = stPtemp;
    
    ...}
    
    当 j = 9 时 pstPtr[j + 1] 越界了吧
    2019-07-17 19:34:44
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载