首页 > 解决方案 > 检测到堆栈粉碎 - 通过指针更新函数中的结构后中止

问题描述

在运行代码期间,我得到“检测到堆栈粉碎” - 在从函数返回指针后中止(它工作正常 - 它是分配结构体并启动它)

// global putside the main:

typedef struct {int id; int flight; int chairs;}request,*Prequest;

//calling from main look like:

Prequest p1 = (Prequest)convert_from_buffer_to_struct(buffer);

//the function :

Prequest convert_from_buffer_to_struct(char buffer[]) {

    printf("\nbuffer is:%s",buffer);
    char sid[ID_LONG],sflight[FLIGHT_LONG],schairs[CHAIRS_LONG];
    int id, chairs, flight;
    Prequest p = (Prequest) malloc(sizeof(request));

    if(p == NULL){ printf("\n in converting :struct allocation faild\n");exit(-1);}

    strcpy(sid,&buffer[0]);
    id= atoi(sid); 
    p->id= id;

    strcpy(sflight,&buffer[ ID_LONG + SPACE_LONG ]);
    flight= atoi(sflight);
    p->flight=flight;

    strcpy(schairs,&buffer[ID_LONG + SPACE_LONG + FLIGHT_LONG +SPACE_LONG]);
    chairs= atoi(schairs);  
    p->chairs=chairs;
    return p;
}

我已经通过在每一行之后放置 printf 来显示每个结果来多次检查该函数,它非常有效,但是在将指针返回到 main 之后我得到了错误。那么你认为这两个指针的原因是什么:
p(从函数返回)和p1(在main中定义),为什么它们会导致堆栈粉碎?!

标签: clinuxpointersstruct

解决方案


我找到了原因,它是调用这个函数的线程,它被定义为指向线程的指针,我修复了它,它可以工作。谢谢


推荐阅读