所以我一直在从事我的一个小项目,但在这一阶段我陷入了困境。我一直在遭受Segfaults的困扰,而且我感到绝望。我有2个结构
typedef struct {
float time;
}Race;
typedef struct {
char DriverName[50];
int NoRaces;
Race *races;
}Driver;
,在给定每个驱动程序的比赛数量之后,我必须为单个驱动程序分配内存,然后为一系列驱动程序分配内存。到目前为止,这是我的代码
Driver *allocDriver(int noRaces) {
Driver *driver;
driver = (Driver *)malloc(sizeof(Driver));
driver->NoRaces = noRaces;
driver->races = (Race *)malloc(sizeof(Race));
return driver;}
Driver **allocDrivers(int driversNo, int *driversRacesNo) {
int i;
Driver **drivers;
drivers = (Driver **)malloc(driversNo * sizeof(Driver *));
for(i = 0; i < driversNo; i++)
drivers[i] = allocDriver(driversRacesNo[i]);
return drivers;}
答案 0 :(得分:0)
尽管我不确定,因为我不知道如何从main
调用这些名称,也不知道分配的内容;我怀疑您需要更改以下行;
driver->races = (Race *)malloc(sizeof(Race));
喜欢:
driver->races = (Race *)malloc(noRaces * sizeof(Race));
例如,您的代码将5个种族存储,但没有为struct Race
分配5个内存空间(我认为,此结构用于种族结果);目前,它只分配一个struct Race
的内存宽度。
答案 1 :(得分:0)
这是在ubuntu 18.04上编译的有关结构表分配的“扩展”但简单示例。希望它能自我解释和说明。对于将来的开发和练习,请尝试使用链表代替数组。
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'grdFilter'
})
export class GrdFilterPipe implements PipeTransform {
transform(items: any, filter: any, defaultFilter: boolean): any {
if (!filter) {
return items;
}
if (!Array.isArray(items)) {
return items;
}
if (filter && Array.isArray(items)) {
const filterKeys = Object.keys(filter);
if (defaultFilter) {
return items.filter(item =>
filterKeys.reduce((x, keyName) =>
(x && new RegExp(filter[keyName], 'gi').test(item[keyName])) || filter[keyName] === '', true));
} else {
return items.filter(item => {
return filterKeys.some((keyName) => {
return new RegExp(filter[keyName], 'gi').test(item[keyName]) || filter[keyName] === '';
});
});
}
}
}
}