解释:所有这些快乐都被编译成一个PHP扩展库
结构
typedef struct {
char *class_name;
char *name;
int size;
int capacity;
op_dumper_node *op_codes;
} op_dumper_function;
typedef struct {
char *name;
int size;
int capacity;
op_dumper_function *functions;
} op_dumper_file;
typedef struct {
int size;
int capacity;
op_dumper_file *files;
} op_dumper_result;
op_dumper_result *result_data;
实际上试图对动态数组进行简单的实现
对于扩展result_data->files,我使用以下代码。效果很好。
if (result_data->size == result_data->capacity) {
result_data->capacity *= 2;
result_data->files = realloc(result_data->files, sizeof(op_dumper_file) * result_data->capacity);
}
对于这样的扩展result_data->files[index].functions:
if (result_data->files[file_num].size == result_data->files[file_num].capacity){
op_dumper_file *file = &result_data->files[file_num];
file->capacity *=2;
file->functions = realloc(
file->functions,
sizeof(op_dumper_function) * file->capacity
);
}
有效,但后来导致错误:
Segmentation fault (core dumped)
是的,正是这段代码导致了错误。如果条件不起作用,那么就没有跌倒。
据我了解,Falls 已经是 PHP 本身了。
我哪里错了?
UPD即使在添加的片段中实际上没有记录任何内容,它也会崩溃。1)我们将 3 个元素写入 3 个元素的数组 - 一切正常。2)我们将 3 个元素写入 3 个元素的数组,然后为 6 个元素分配内存,但我们并没有真正添加更多元素 - 崩溃。
上网看了下,改了如下:
整洁、一致的指针解引用
PS错误不在realloc中,而是在原则上错误的方法