Faits :
A.
Par jugement du 16 septembre 2016, le Tribunal correctionnel de la République et canton de Genève a condamné X._, pour infraction grave à la LStup et séjour illégal, à une peine privative de liberté de quatre ans et demi.
Le prénommé a été incarcéré le 21 juillet 2015. Le 30 avril 2018, il a intégré l'établissement A._, exécutant sa peine sous le régime du travail externe.
B.
Le 16 mai 2018, X._ a déposé une demande de libération conditionnelle. Les deux tiers de la peine privative de liberté qu'il exécutait devaient être atteints le 18 juillet 2018.
Par jugement du 11 juillet 2018, le Tribunal d'application des peines et mesures (ci-après : TAPEM) a ordonné la libération conditionnelle de X._ avec effet au jour de son renvoi de Suisse, au plus tôt le 18 juillet 2018. Il ressort de ce jugement que le prénommé a fait l'objet d'une décision de renvoi de Suisse en date du 12 juin 2009 - entrée en force le 24 juin 2009 - et que la date de libération de l'intéressé n'est pas offerte au choix de ce dernier, le TAPEM n'étant pas légitimé à intervenir au sujet des modalités d'un renvoi.
C.
Le 5 août 2018, X._ n'est pas revenu de son congé et a quitté le territoire suisse pour gagner l'Espagne, où il prétend se trouver actuellement.
Par courrier du 7 août 2018, le prénommé - par l'intermédiaire de son avocat - a indiqué au Service de l'application des peines et mesures (ci-après : SAPEM) qu'il estimait avoir exécuté la décision de renvoi datant de juin 2009 et que les effets du jugement du TAPEM du 11 juillet 2018 se déployaient pleinement.
Par courrier du 10 septembre 2018, le SAPEM a répondu à X._ qu'au vu de son non-retour de congé, celui-ci demeurait en arrestation pour un solde de peine d'un an, cinq mois et 13 jours. Le SAPEM a joint à cet envoi l'ordre d'exécution "Ripol" du même jour, adressé à la prison de B._. Il a en outre refusé de restituer à l'intéressé ses documents d'identité et autres effets personnels ainsi que de solder ses comptes.
D.
Le 24 septembre 2018, X._ a formé recours contre l'ordre d'exécution de peine du 10 septembre 2018 par lequel le SAPEM avait requis sa détention à la prison de B._ pour un solde de peine d'un an, cinq mois et 13 jours. Il a également formé recours contre la décision du SAPEM du 10 septembre 2018 lui signifiant avoir ordonné son arrestation - pour le solde de peine précité, en raison de son non-retour de congé le 5 août 2018 - et refusant de lui restituer ses effets personnels ainsi que de solder ses comptes.
Par arrêt du 2 octobre 2018, la Chambre pénale de recours de la Cour de justice genevoise a rejeté ce recours, dans la mesure de sa recevabilité, ainsi que la demande d'assistance judiciaire et de désignation d'un avocat d'office. Elle a condamné X._ au paiement des frais de la procédure de recours.
E.
X._ forme un recours en matière pénale au Tribunal fédéral contre l'arrêt du 2 octobre 2018, en concluant, avec suite de frais et dépens, à sa réforme en ce sens que la cour cantonale entre en matière sur son recours en tant que celui-ci concerne l'ordre d'exécution de peine du 10 septembre 2018 et la décision du même jour ordonnant son arrestation, et que l'assistance judiciaire lui est accordée pour la procédure cantonale, la cause étant renvoyée à l'autorité précédente en vue de la fixation de l'indemnité au défenseur d'office. Il sollicite par ailleurs le bénéfice de l'assistance judiciaire.
F.
Invités à se déterminer sur le recours, la cour cantonale s'est référée à son arrêt tandis que le SAPEM n'a pas présenté d'observations dans le délai imparti.
Considérant en droit :
1.
Dans l'arrêt attaqué, la cour cantonale a exposé que le recours du recourant était notamment dirigé contre l'ordre d'exécution d'un solde de peine privative de liberté fondé sur un jugement de condamnation exécutoire, soit un acte matériel. Dans cette mesure, l'autorité précédente a considéré que le recours était irrecevable, puisque la légalité du jugement condamnatoire à l'origine du solde de peine était admise et que l'intéressé n'était alors pas privé de liberté mais séjournait en Espagne.
La cour cantonale a néanmoins examiné la validité de l'ordre d'exécution litigieux et sa conformité avec le jugement du TAPEM du 11 juillet 2018. Ainsi, l'autorité précédente est, de facto, entrée en matière sur le recours du recourant à cet égard également. L'intéressé a d'ailleurs, sur ce point, présenté un grief de fond devant le Tribunal fédéral et l'on comprend de sa motivation qu'il souhaite l'annulation des ordres d'exécution et d'arrestation du 10 septembre 2018.
Partant, il apparaît expédient de considérer que la cour cantonale est entrée en matière sur la partie du recours contestée par le recourant devant le Tribunal fédéral et qu'elle a rejeté celui-ci dans cette mesure (cf. dans le même sens l'arrêt 6B_1063/2018 du 26 novembre 2018 consid. 1). Cela rend sans objet les griefs du recourant consacrés à l'irrecevabilité partielle de son recours devant la cour cantonale.
2.
A propos de la validité des ordres d'exécution de peine et d'arrestation du 10 septembre 2018, la cour cantonale a indiqué que, selon le jugement du TAPEM du 11 juillet 2018, le recourant avait été "mis au bénéfice d'une libération conditionnelle avec effet au jour de son renvoi de Suisse, mais au plus tôt le 18 juillet 2018". Selon elle, la libération conditionnelle ne "devenait effective qu'au moment dudit renvoi". Or, pour l'autorité précédente, il n'apparaissait pas que la décision de renvoi du 12 juin 2009, entrée en force le 24 juin suivant, qui prévoyait un renvoi vers l'Autriche, eût été exécutée "par les autorités compétentes". Cette décision n'avait en particulier pas été exécutée le 5 août 2018, date à laquelle le recourant n'avait pas réintégré son établissement de détention au terme d'un congé et avait quitté la Suisse pour l'Espagne. La cour cantonale a déduit de cette situation que le SAPEM avait à bon droit ordonné l'arrestation de l'intéressé en vue de l'exécution du solde de peine privative de liberté.
On peine à comprendre le sens d'un tel raisonnement. Dans son jugement du 11 juillet 2018, le TAPEM a considéré que le recourant réunirait les conditions d'une libération conditionnelle dès le 18 juillet 2018, date à laquelle les deux tiers de la peine exécutée seraient atteints. Selon le TAPEM, cette libération conditionnelle devait ainsi être ordonnée "avec effet au jour de son renvoi de Suisse", mais au plus tôt le 18 juillet 2018. Il ressort de l'arrêt attaqué que le recourant n'a pas été remis en liberté en date du 18 juillet 2018, non plus que les jours suivants, alors même qu'une décision de renvoi du territoire suisse le concernant était exécutoire, selon la cour cantonale, depuis 2009. On ignore quelle forme aurait dû prendre, pour l'autorité précédente, un renvoi exécuté par "les autorités compétentes" et l'on ne voit pas quel intérêt distinct aurait poursuivi un tel renvoi effectué avec le concours de ces autorités. Quoi qu'il en soit, il apparaît que le recourant a quitté le territoire suisse postérieurement au 18 juillet 2018, si bien que son renvoi, vers l'Autriche ou vers tout autre pays, n'avait dès lors plus à être exécuté par une quelconque autorité en Suisse. Partant, le recourant se trouvait, selon le jugement du TAPEM du 11 juillet 2018, au bénéfice d'une libération conditionnelle.
Compte tenu de ce qui précède, le fait que le recourant eût quitté le territoire suisse après le 18 juillet 2018 a permis à la libération conditionnelle qui lui avait été octroyée de déployer ses effets. Ce départ ne pouvait par conséquent - en tant que tel - contrevenir au jugement du TAPEM du 11 juillet 2018. Les ordres d'exécution de peine et d'arrestation du 10 septembre 2018 visent la réintégration du recourant dans l'établissement de détention, sans que l'on ne perçoive quel motif permettrait de conclure à un échec de la mise à l'épreuve au sens de l'art. 89 CP. Au demeurant, on ne voit pas quel serait l'intérêt de procéder à l'arrestation et à la réintégration du recourant dans un établissement de détention si celui-ci remplit, sur le fond, les conditions d'une libération conditionnelle au sens de l'art. 86 CP.
Au vu de ce qui précède, le recours doit être admis sur ce point, l'arrêt attaqué annulé et la cause renvoyée à l'autorité cantonale afin que celle-ci annule les ordres d'exécution de peine et d'arrestation du 10 septembre 2018. Comme la cour cantonale a, dans l'arrêt attaqué, rejeté les conclusions du recourant tendant à la restitution de ses effets personnels - dont ses documents d'identité - et au solde de ses comptes en considérant que l'ordre d'exécution de peine du 10 septembre 2018 était valable, il appartiendra par ailleurs à l'autorité cantonale d'examiner à nouveau cette question.
3.
Dans l'arrêt attaqué, la cour cantonale a également refusé de mettre le recourant au bénéfice de l'assistance judiciaire en considérant que ses conclusions étaient vouées à l'échec.
Dès lors que l'autorité cantonale devra statuer à nouveau sur la cause en faisant - à tout le moins partiellement - droit aux conclusions qui avaient été prises par le recourant devant la cour cantonale (cf. consid. 2 supra), il lui appartiendra en outre d'examiner à nouveau si l'intéressé pouvait être mis au bénéfice de l'assistance judiciaire.
4.
Le recours doit être admis. Le recourant, qui obtient gain de cause, ne supporte pas de frais judiciaires (art. 66 al. 1 LTF). Il peut prétendre à une indemnité de dépens, à la charge du canton de Genève. La demande d'assistance judiciaire devient ainsi sans objet (art. 64 al. 1 LTF). Il est statué sans frais.
Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est admis, l'arrêt attaqué est annulé et la cause est renvoyée à l'autorité cantonale pour nouvelle décision.
2.
Il n'est pas perçu de frais judiciaires.
3.
Le canton de Genève versera au recourant une indemnité de 3'000 fr. à titre de dépens pour la procédure devant le Tribunal fédéral.
4.
Le présent arrêt est communiqué aux parties et à la Cour de justice de la République et canton de Genève, Chambre pénale de recours.
Lausanne, le 30 janvier 2019
Au nom de la Cour de droit pénal
du Tribunal fédéral suisse
Le Président : Denys
Le Greffier : Graa