Faits:
A. A._, née en 1955, a bénéficié d'une demi-rente de l'assurance-invalidité du 1er mars 2001 au 31 mars 2005 (pour cas pénible), puis d'un quart de rente à compter du 1er avril 2005 fondé sur un taux d'invalidité de 45 %.
A l'issue d'une procédure de révision du droit à la rente, l'Office cantonal de l'assurance-invalidité a constaté que l'état de santé de l'assurée s'était amélioré. L'évaluation de l'invalidité a abouti à un degré de 39 %, ce qui a conduit l'office AI à supprimer la rente par décision du 24 octobre 2008.
B. A._ a déféré cette décision au Tribunal cantonal des assurances sociales de la République et canton de Genève en concluant au maintien du quart de rente ainsi qu'à l'octroi de mesures professionnelles.
Par jugement du 3 mars 2009, la juridiction cantonale a rejeté le recours. Elle a toutefois substitué ses motifs à ceux de l'office AI, considérant que l'octroi du quart de rente était jadis manifestement erroné. Le tribunal a dès lors confirmé la suppression de rente, après avoir fixé le degré d'invalidité à 34 %.
C. A._ interjette un recours en matière de droit public contre ce jugement dont elle demande l'annulation, avec suite de dépens, en concluant au renvoi de la cause aux premiers juges. Elle sollicite le bénéfice de l'assistance judiciaire.
L'intimé conclut au rejet du recours. L'Office fédéral des assurances sociales a renoncé à se déterminer.

Considérant en droit:
1. Le litige porte sur le maintien du quart de rente d'invalidité à compter du 1er décembre 2008, ainsi que sur le droit de la recourante à des mesures d'ordre professionnel.
2. La recourante se plaint en premier lieu d'une violation de son droit d'être entendue, alléguant que les juges cantonaux ne l'ont pas avertie qu'ils envisageaient de substituer les motifs retenus par l'intimé pour supprimer la rente, et qu'ils ont omis de lui impartir un délai pour se déterminer sur cette question. Elle précise que l'éventualité d'une reconsidération de la décision initiale d'octroi de la rente n'avait jamais été évoquée au cours de la procédure de révision de la rente.
Par ailleurs, la recourante invoque un déni de justice relatif à la non-prise en considération d'une demande de mesures professionnelles, ainsi qu'une erreur manifeste dans le calcul du taux d'invalidité.
3. En vertu de l'<ref-law>, si le taux d'invalidité du bénéficiaire de la rente subit une modification notable, la rente est, d'office ou sur demande, révisée pour l'avenir, à savoir augmentée ou réduite en conséquence, ou encore supprimée si les circonstances dont dépendait l'octroi changent notablement. Si les conditions prévues à l'<ref-law> font défaut, la décision de rente peut être éventuellement modifiée d'après les règles applicables à la reconsidération de décisions administratives passées en force. En effet, conformément à l'<ref-law>, l'assureur peut revenir sur les décisions ou les décisions sur opposition formellement passées en force lorsqu'elles sont manifestement erronées et que leur rectification revêt une importance notable.
Le cas échéant, le juge cantonal peut confirmer une décision de révision rendue à tort pour le motif substitué que la décision de rente initiale était sans nul doute erronée et que sa rectification revêt une importance notable. S'il entend le faire, le juge doit alors donner à l'assuré la possibilité de s'exprimer, à peine de violer son droit d'être entendu garanti par l'art. 29 al. 2 Cst. (<ref-ruling> consid. 2 p. 369 et les arrêts cités, consid. 4a p. 370). Le Tribunal fédéral ne saurait réparer une telle omission, compte tenu de son pouvoir d'examen restreint (arrêt 9C_272/2009 du 16 septembre 2009 consid. 4.1).
4. En l'espèce, le tribunal cantonal a confirmé la suppression de la rente en substituant ses propres motifs à ceux de l'intimé, sans respecter le droit de la recourante d'être entendue sur la question de la reconsidération (au sens de l'<ref-law>) qui n'avait jamais été évoquée au cours de la procédure de révision. Pour cette unique raison, le jugement attaqué sera annulé et la cause renvoyée aux premiers juges afin qu'ils puissent inviter la recourante à se déterminer sur la question de l'application de l'<ref-law>, puis rendre un nouveau jugement.
Vu l'issue du litige, il est superflu d'examiner en l'état les griefs relatifs aux mesures professionnelles et au calcul du taux d'invalidité.
5. En principe, des frais judiciaires et des dépens ne peuvent être mis à la charge d'un canton s'il s'adresse au Tribunal fédéral dans l'exercice des attributions officielles sans que son intérêt patrimonial soit en cause ou si ses décisions font l'objet d'un recours (<ref-law>). Toutefois, il y a lieu de déroger à ce principe lorsque la décision attaquée viole de manière qualifiée les règles d'application de la justice et cause de ce fait des frais aux parties (<ref-law>; <ref-ruling> consid. 5 p. 407 et les arrêts cités; Hansjörg Seiler, in Bundesgerichtsgesetz [BGG], 2007, n° 43 ad art. 66; Thomas Geiser, in Basler Kommentar, Bundesgerichtsgesetz, 2008, n° 25 ad art. 66). En n'informant pas la recourante de la substitution de motifs envisagée, le Tribunal cantonal des assurances sociales a violé de manière qualifiée son droit d'être entendue, ce qui justifie une nouvelle fois de mettre les frais de justice et les dépens à la charge de la République et canton de Genève, à l'instar de l'affaire genevoise qui avait donné lieu à l'arrêt 9C_394/2008 du 12 février 2009.
Vu ce qui précède, la demande d'assistance judiciaire n'a plus d'objet.

Par ces motifs, le Tribunal fédéral prononce:
1. Le recours est admis. Le jugement du Tribunal cantonal des assurances sociales de la République et canton de Genève du 3 mars 2009 est annulé, la cause étant renvoyée à cette autorité pour qu'elle procède conformément aux considérants.
2. Les frais judiciaires, arrêtés à 500 fr., sont mis à la charge de la République et canton de Genève.
3. La République et canton de Genève versera à la recourante la somme de 2'000 fr. (y compris la TVA) à titre de dépens pour la dernière instance.
4. Le présent arrêt est communiqué aux parties, au Tribunal cantonal des assurances sociales de la République et canton de Genève, à la Caisse cantonale genevoise de compensation, à la République et canton de Genève et à l'Office fédéral des assurances sociales.
Lucerne, le 22 janvier 2010
Au nom de la IIe Cour de droit social
du Tribunal fédéral suisse
Le Président: Le Greffier:
Meyer Berthoud