document.createElement, возвращающий 'undefined'

Как насчет этой невероятно злой реализации?

array.h

#define IMPORT_ARRAY(TYPE)    \
    \
struct TYPE##Array {    \
    TYPE* contents;    \
    size_t size;    \
};    \
    \
struct TYPE##Array new_##TYPE##Array() {    \
    struct TYPE##Array a;    \
    a.contents = NULL;    \
    a.size = 0;    \
    return a;    \
}    \
    \
void array_add(struct TYPE##Array* o, TYPE value) {    \
    TYPE* a = malloc((o->size + 1) * sizeof(TYPE));    \
    TYPE i;    \
    for(i = 0; i < o->size; ++i) {    \
        a[i] = o->contents[i];    \
    }    \
    ++(o->size);    \
    a[o->size - 1] = value;    \
    free(o->contents);    \
    o->contents = a;    \
}    \
void array_destroy(struct TYPE##Array* o) {    \
    free(o->contents);    \
}    \
TYPE* array_begin(struct TYPE##Array* o) {    \
    return o->contents;    \
}    \
TYPE* array_end(struct TYPE##Array* o) {    \
    return o->contents + o->size;    \
}

main.c

#include <stdlib.h>
#include "array.h"

IMPORT_ARRAY(int);

struct intArray return_an_array() {
    struct intArray a;
    a = new_intArray();
    array_add(&a, 1);
    array_add(&a, 2);
    array_add(&a, 3);
    return a;
}

int main() {
    struct intArray a;
    int* it;
    int* begin;
    int* end;
    a = return_an_array();
    begin = array_begin(&a);
    end = array_end(&a);
    for(it = begin; it != end; ++it) {
        printf("%d ", *it);
    }
    array_destroy(&a);
    getchar();
    return 0;
}
1
задан Aron 17 January 2019 в 20:51
поделиться

1 ответ

Моя проблема заключалась в том, что document.createElement заменяли некоторые (глючные) инъецированные антифишинговые JS, о которых я не знал. Проблема с тем, что JS выходит за рамки этого вопроса, но советы по отладке, приведенные в комментариях к этому вопросу, были ценными для его отслеживания:

  1. Тот факт, что document.createElement находился в тени, был обнаружен отмечая, что document.hasOwnProperty('createElement') вернул true.
  2. Определение функции установки для document.createElement, которая запускает отладчик, помогло мне отследить нарушающий код. Для этой цели я использовал фрагмент break-on-access , но также см. Простой код в в этом комментарии выше для альтернативы «брось себе».
0
ответ дан Aron 17 January 2019 в 20:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: