我遇到了一段代码,对我来说应该会因分段错误而崩溃,但它可以顺利运行。有问题的代码加上相关的数据结构如下(上面有相关的注释):
typedef struct {
double length;
unsigned char nPlaced;
unsigned char path[0];
}
RouteDefinition* Alloc_RouteDefinition()
{
// NB: The +nBags*sizeof.. trick "expands" the path[0] array in RouteDefinition
// to the path[nBags] array
RouteDefinition *def = NULL;
return (RouteDefinition*) malloc(sizeof(RouteDefinition) + nBags * sizeof(def->path[0]));
}
为什么这行得通?我收集到char *的大小将解析为给定架构上指针的大小,但它不应该在取消引用 -pointer 时崩溃和烧毁吗?NULL