C语言中的访问冲突
我试图通过使用指向结构对象的指针,使用C语言中的访问冲突,c,pointers,struct,access-violation,C,Pointers,Struct,Access Violation,我试图通过使用指向结构对象的指针,使用qsort()对结构进行排序。但是,当我试图运行该程序时,抛出了一个访问冲突错误。我迷路了 这是我的数组: struct studenten_typ sfeld[] = { { 123456, 1273.17, { "Erna", "Schlaukopf" } }, { 213456, 1273.17, { "Erna", "Meier" } }, {
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" } }
};
struct studenten_typ {
/** Matrikelnummer als eindeutiges Kriterium */
int matrikel_nr;
/** Monatsgehalt der DH-Studenten*/
double gehalt;
/** Name. */
struct namens_typ name;
}
这是我在main中的qsort函数(这里是我得到错误的地方)
这是我的比较函数
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;
}
qsort size参数是每个元素的大小,而不是整个数组的大小。从: 函数的作用是:使用大小为的nmemb元素对数组进行排序
因此
sizeof(sfeld)
应该是sizeof(sfeld[0])
qsort size参数是每个元素的大小,而不是整个数组的大小。从:
函数的作用是:使用大小为的nmemb元素对数组进行排序
因此
sizeof(sfeld)
应该是sizeof(sfeld[0])
您是否尝试过在调试器中逐行运行代码,同时监视所有变量的值,以确定程序在哪一点停止按预期运行?如果未尝试此操作,则可能需要阅读以下内容:qsort
size参数是每个元素的大小,而不是整个数组的大小。因此sizeof(sfeld)
应该是sizeof(sfeld[0])
。您是否尝试过在调试器中逐行运行代码,同时监视所有变量的值,以确定程序在哪一点停止按预期运行?如果未尝试此操作,则可能需要阅读以下内容:qsort
size参数是每个元素的大小,而不是整个数组的大小。所以sizeof(sfeld)
应该是sizeof(sfeld[0])
.thaaaanks:)thaaaanks:)
struct studenten_typ {
/** Matrikelnummer als eindeutiges Kriterium */
int matrikel_nr;
/** Monatsgehalt der DH-Studenten*/
double gehalt;
/** Name. */
struct namens_typ name;
}