gpt4 book ai didi

c - X、Y、Z 坐标的文件,需要将它们从低到高排序。我可以读取文件,分配内存并将它们分配给结构,

转载 作者:行者123 更新时间:2023-11-30 14:36:21 25 4
gpt4 key购买 nike

在第一个 if 语句上不断出现内存访问冲突。我可以将文件和标记中的数据加载到结构中。

typedef struct
{
int x;
int y;
int z;
} Coordinates;

typedef Coordinates * xyz;
int compare(const void *p1, const void *p2)
{
const xyz point1 = *(const xyz *)p1;
const xyz point2 = *(const xyz *)p2;
if (point1->x < point2->x) return -1; //read access violation
if (point1->x > point2->x) return 1;
if (point1->y < point2->y) return -1;
if (point1->y > point2->y) return 1;
if (point1->z < point2->z) return -1;
if (point1->z > point2->z) return 1;
else return 0;
}

int main()
{
int numberofpoints;
//allocates memory
Coordinates * xyz = (Coordinates *)malloc(sizeof(Coordinates)*numberofpoints);
//call qsort
qsort(xyz, numberofpoints, sizeof(xyz), compare);
}

最佳答案

错误在这里:

const xyz point1 = *(const xyz *)p1;
const xyz point2 = *(const xyz *)p2;
^ ^^^
| wrong type
|
wrong dereference

简单地做

const  Coordinates * point1 = (const  Coordinates *)p1;
const Coordinates * point2 = (const Coordinates *)p2;

并避免使用指针的 typedef。这是令人困惑且容易出错的。

所以删除这个:

typedef Coordinates * xyz;

如果你真的非常想要指针 typedef,你至少应该使用一个有意义的名称,即

typedef Coordinates * CoordinatesPtr;

此外,您需要将 sizeof(xyz) 更改为 sizeof *xyz

关于c - X、Y、Z 坐标的文件,需要将它们从低到高排序。我可以读取文件,分配内存并将它们分配给结构,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58109762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com