Le code suivant se plantera à vec2 (vec.size()) si je construis le code pour x64 Android avec NDK-build (x86 a bien fonctionné).accident vecteur STL sur Android x64
hello.cpp
#include <vector>
#include <stdio.h>
using namespace std;
int main(int argc, char* argv[])
{
vector<int> vec;
vec.push_back(11);
vec.clear();
vector<int> vec2(vec.size());
return 0;
}
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello
LOCAL_SRC_FILES := hello.cpp
include $(BUILD_EXECUTABLE)
Application.mk
APP_ABI := x86_64
APP_STL := stlport_static
Il est bizarre. La valeur de vec.size() est égal à 0. Si je change le code comme suit:
vector<int> vec2(0);
l'application ne plantera pas. Le problème semble provenir de l'optimisation du compilateur. CFLAG -O2 est utilisé par défaut. Si j'ajoute un autre CFLAG, tel que -O0 après, l'application ne tombera pas en panne non plus.
Est-ce que quelqu'un sait pourquoi?
Merci!