gpt4 book ai didi

c - Qsort 带有指向字段段错误的指针

转载 作者:行者123 更新时间:2023-11-30 17:43:09 25 4
gpt4 key购买 nike

我想根据 0 列对 (*double)[3] 类型的指针进行排序 pnt[i][0] 。例如来自

4 3 4
2 1 2
9 4 5

我要

2 1 2
4 3 4
9 4 5

我调用了快速排序函数

qsort (pnt, numOfRows, sizeof(double), forQs);

forQ 如下

int forQs (const void *x, const void *y)
{
const double **k = (const double **)x;
const double **l = (const double **)y;
return (*k)[0] - (*l)[0];
}

我最终遇到了段错误,valgrind 说这是因为 forQs。我之前一直在探索如何创建它,因为我不太了解 qsort,但我看不出有任何错误。有人可以帮忙吗?

编辑:我还使用过:

pnt = (double (*)[3]) malloc(100 * sizeof(*pnt));

最佳答案

我尝试制作两个 sample ,因为你不够好未知。请引用一下。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int forQs (const void *x, const void *y)
{
const double **k = (const double **)x;
const double **l = (const double **)y;
return (*k)[0] - (*l)[0];
}

int main(){
double **pnt = malloc(100*sizeof(double(*)[3]));
int i, j;

for(i=0;i<3;++i)
pnt[i] = malloc(sizeof(double[3]));

memcpy(pnt[0], (double [3]){4.0, 3.0, 4.0}, sizeof(double[3]));
memcpy(pnt[1], (double [3]){2.0, 1.0, 2.0}, sizeof(double[3]));
memcpy(pnt[2], (double [3]){9.0, 4.0, 5.0}, sizeof(double[3]));

{//print before sort
int i,j;
for(i=0;i<3;++i){
for(j=0;j<3;++j)
printf("%g ", pnt[i][j]);
printf("\n");
}
printf("\n");

}
int numOfRows = 3;
// qsort(pnt, numOfRows, sizeof(double*), forQs);
qsort(pnt, numOfRows, sizeof(*pnt), forQs);
{//print after sort
int i,j;
for(i=0;i<3;++i){
for(j=0;j<3;++j)
printf("%g ", pnt[i][j]);
printf("\n");
}

}
return 0;
}
<小时/>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int forQs (const void *x, const void *y)
{
const double (*k)[3] = *(const double (**)[3])x;
const double (*l)[3] = *(const double (**)[3])y;
return (*k)[0] - (*l)[0];
}

int main(){
double (**pnt)[3] = malloc(100*sizeof(*pnt));
int i, j;

for(i=0;i<3;++i)
pnt[i] = malloc(sizeof(double[3]));

memcpy(pnt[0], (double [3]){4.0, 3.0, 4.0}, sizeof(double[3]));
memcpy(pnt[1], (double [3]){2.0, 1.0, 2.0}, sizeof(double[3]));
memcpy(pnt[2], (double [3]){9.0, 4.0, 5.0}, sizeof(double[3]));

{//print before sort
int i,j;
for(i=0;i<3;++i){
for(j=0;j<3;++j)
printf("%g ", (*(pnt[i]))[j]);
printf("\n");
}
printf("\n");

}
int numOfRows = 3;
//qsort(pnt, numOfRows, sizeof(double(*)[3]), forQs);
qsort(pnt, numOfRows, sizeof(*pnt), forQs);

{//print after sort
int i,j;
for(i=0;i<3;++i){
for(j=0;j<3;++j)
printf("%g ", (*(pnt[i]))[j]);
printf("\n");
}

}
return 0;
}

关于c - Qsort 带有指向字段段错误的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20293866/

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