c - 检测到堆栈粉碎 - 通过指针更新函数中的结构后中止
问题描述
在运行代码期间,我得到“检测到堆栈粉碎” - 在从函数返回指针后中止(它工作正常 - 它是分配结构体并启动它)
// 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中定义),为什么它们会导致堆栈粉碎?!
解决方案
我找到了原因,它是调用这个函数的线程,它被定义为指向线程的指针,我修复了它,它可以工作。谢谢
推荐阅读
- sql - 使用 SQL 计算电费单价板
- python-3.x - AttributeError:模块“dateutil.tz”在 Zappa Deploy 上没有属性“UTC”
- javascript - 使用 Jquery 交换 div ID
- javascript - 如何使用javascript在文件中发布字符串?
- three.js - ThreeJS:InstancedMesh 三角形计数未更新
- ruby-on-rails - 带有Webpacker触发器的rails中的传单找不到地图容器
- python - 如何根据阈值划分列表?
- css - 预加载会阻塞整个渲染阶段
- android - java.lang.IllegalArgumentException:无法在形状为 [2] 的 TensorFlowLite 张量和形状为 [1、2] 的 Java 对象之间复制
- react-native-ui-kitten - 如何更改底部导航中选定的 BottomNavigationTab 的颜色( ui-kitten )