【发布时间】:2020-12-05 21:02:45
【问题描述】:
我尝试使用指向结构对象的指针对带有qsort() 的结构进行排序。但是当我尝试运行该程序时,我会抛出一个访问冲突错误。我迷路了。
这是我的数组:
struct studenten_typ sfeld[] = {
{ 123456, 1273.17, { "Erna", "Schlaukopf" } },
{ 213456, 1273.17, { "Erna", "Meier" } },
{ 423456, 1373.67, { "Emil", "Meier" } },
{ 473456, 1193.17, { "Anton", "Mueller" } },
{ 503456, 1473.17, { "Anna", "Mueller" } },
{ 523456, 1063.17, { "Max", "Muster" } },
{ 573456, 945.17, { "Eva", "Muster" } },
{ 723456, 1123.17, { "Xaver", "Kurz" } },
{ 953456, 1273.17, { "Erna", "Schlaukopf" } },
{ 773456, 1243.17, { "Karl", "Kurz" } }
};
这是我在 main 中的 qsort 函数(这是我得到错误的地方)
qsort(&sfeld[0], sfeld_n, sizeof(sfeld), stud_matrnr_aufst_vgl_fkt_ptr);
这是我的比较函数
int stud_matrnr_aufst_vgl_fkt_ptr(const void*v1_ptr, const void*v2_ptr)
{
struct studenten_typ* p1 = (void*)v1_ptr;
struct studenten_typ* p2 = (void*)v2_ptr;
// .... ???
if (p1->matrikel_nr > p2->matrikel_nr)
return 1;
if (p1->matrikel_nr < p2->matrikel_nr)
return -1;
if (p1->matrikel_nr == p2->matrikel_nr)
return 0;
}
我的结构是这样的:
struct studenten_typ {
/** Matrikelnummer als eindeutiges Kriterium */
int matrikel_nr;
/** Monatsgehalt der DH-Studenten*/
double gehalt;
/** Name. */
struct namens_typ name;
}
【问题讨论】:
-
您是否尝试过在调试器中逐行运行代码,同时监控所有变量的值,以确定您的程序在哪个点停止按预期运行?如果您没有尝试过,那么您可能想阅读以下内容:What is a debugger and how can it help me diagnose problems? 您可能还想阅读以下内容:How to debug small programs?。
-
qsortsize 参数是每个元素的大小,而不是整个数组的大小。所以sizeof(sfeld)应该是sizeof(sfeld[0])。
标签: c pointers struct access-violation