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?
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.
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;
}
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.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!