【问题标题】:Access Violation in CC中的访问冲突
【发布时间】: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?
  • qsort size 参数是每个元素的大小,而不是整个数组的大小。所以sizeof(sfeld) 应该是sizeof(sfeld[0])

标签: c pointers struct access-violation


【解决方案1】:

qsort size 参数是每个元素的大小,而不是整个数组的大小。来自man page

qsort() 函数对具有 nmemb 个大小为 size 的元素的数组进行排序。

所以sizeof(sfeld) 应该是sizeof(sfeld[0])

【讨论】:

  • thaaaaaaanks :)
猜你喜欢
  • 2018-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多