Kezdőoldal » Számítástechnika » Programozás » C++ qsort feladat probléma....

C++ qsort feladat probléma. Ha debugolom végigfut és nem mutat hibát, de ha futtatom, hibaüzenet és csak az 1.sorát írja ki a mátrixnak (de azt helyesen legalább). Mi a gond?

Figyelt kérdés

Adott egy nxm méretű mátrix egy állományban. Írjuk ki a soronként rendezett mátrixot egy kimeneti állományba. (A mátrixot dinamikus tömbben tároljuk, és qsort-al rendezzük sorait)

Nincs megadva, de csökkenőbe rendeztem.


[link]


bemenet.txt

6 8

5 9 4 0 6 3 7 8

6 9 0 0 4 1 3 8

3 6 4 9 8 7 5 2

3 6 4 7 5 5 4 1

2 6 2 2 2 3 8 1

5 9 1 7 6 4 3 5


Program

#include <iostream>

#include <fstream>

#include <stdlib.h>


using namespace std;


int rendezes(const void*, const void*);

int main()

{

ifstream fin;

fin.open("bemenet.txt");

if (!fin.is_open())

{

cout << "Hibas input";

return 0;

}

ofstream fout;

fout.open("kimenet.txt");

if (!fout.is_open())

{

cout << "Hibas output";

return 0;

}

int i, j, n, m, **a;

fin >> n >> m;

a = (int**)malloc(n*sizeof(int*));

if (a==NULL)

{

cout << "Hiba a helyfoglalasban";

return 0;

}

for (i=0; i<n; ++i)

{

a[i] = (int*)malloc(n*sizeof(int));

if (a[i]==NULL)

{

cout << "Hiba a helyfoglalasban";

return 0;

}

for (j=0; j<m; ++j)

{

fin >> a[i][j];

}

qsort(a[i],m,sizeof(int),rendezes);

for (j=0; j<m; ++j)

{

fout << a[i][j] << " ";

}

fout << endl;

}

for (i=0; i<n; ++i)

{

free(a[i]);

}

free(a);

fin.close();

fout.close();

return 0;

}


int rendezes(const void* p1, const void* p2)

{

int *q1 = (int*)p1;

int *q2 = (int*)p2;

if (*q1<*q2) return 1;

else if (*q1>*q2) return -1;

else return 0;

}



2020. júl. 26. 02:49
 1/2 anonim ***** válasza:
100%

Linux alatt fordítva, futtatáskor ilyesmi a hibaüzenet:

test: malloc.c:2401: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.

szóval valahol a memóriafoglalásban keresendő a probléma.


Meg is van:

a[i] = (int*)malloc(n*sizeof(int));

helyett

a[i] = (int*)malloc(m*sizeof(int));

ugye n*m-es tömbről van szó, nem n*n-esről.

2020. júl. 26. 13:14
Hasznos számodra ez a válasz?
 2/2 A kérdező kommentje:
Köszi
2020. júl. 27. 03:55

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!