va_list Absturz beim 64-Bit-Simulator

8

Bei Verwendung des 64-Bit-iOS-Simulators stürzt die folgende init-Funktion mit dem Fehler EXC_BAD_ACCESS (code = 1) ab. Würde jemand wissen warum? Und wie man es richtig repariert.

Zur Information: 'format' ist nicht nil, und es funktioniert gut auf 32-Bit-Simulator und alle 32/64 Bit iPhone / iPad-Geräte.

%Vor%

rief als erstes in AppDelegate

auf %Vor%     
kokluch 23.05.2014, 15:40
quelle

2 Antworten

11

Irgendwie hat mir der A-Live-Kommentar eine Idee gegeben und ich habe herausgefunden, wie ich den Absturz vermeiden kann.

Ich habe argList zweimal im selben va_start / va_end-Block verwendet

%Vor%

und

%Vor%

Es scheint, dass iOS 64-Bit-Simulator es nicht mag. Ich weiß nicht, warum es funktioniert, finde es in jeder anderen Platte (und auch in realen Geräten). Also habe ich es behoben, indem ich zwei verschiedene Bocks gemacht habe.

%Vor%

Ich hoffe, es wird jemandem helfen. Wenn jemand weiß warum, bin ich immer noch neugierig, davon zu hören.

    
kokluch 24.05.2014, 11:57
quelle
1

Ich habe dieses Problem auch letzte Nacht kennengelernt. Ich habe dafür ein Radar angemeldet.

Meine Arbeit im Moment macht eine va_copy:

%Vor%

und dann später rufe ich die nächste Methode auf

%Vor%

Mit anderen Worten, ich benutze die Kopie lokal. Ich habe etwas experimentiert. Ich habe eine Kopie gemacht, wenn die va_list und dann das mit dem Original verglichen, nachdem das Original so verwendet wurde.

%Vor%

Ausgabe während des Bytevergleichs: Übereinstimmung bei Index 8 (orig = 0xd8 Kopie = 0xe0). Vor dem Anruf habe ich auch das Byte verglichen und sie waren gleich.

Aus irgendeinem Grund im 64-Bit-Simulator korrumpieren initWithFormat: Argumente und NSLogv die va_list.

    
Mobile Ben 04.08.2014 18:58
quelle