В моем коде у меня есть такая структура:
typedef struct aresta {
int idAresta;
struct aresta *prox;
} aresta;
typedef struct vertice {
int idVertice;
struct vertice* prox;
aresta* ini;
} vertice;
typedef struct grafo {
vertice* ini;
int tamanho;
} grafo;
В кодовых блоках, работающих в Windows , когда я вставляю вторую вершину Я получаю ОТСУТСТВИЕ СЕГМЕНТАЦИИ:
0 0x40171e jaExisteVertice(g=0x692238, idVertice=2)
1 0x4015b6 inserirVertice(g=0x692238, id=2)
2 0x401415 main()
inserirVertice (g, tmp);
void inserirVertice(grafo *g, int id)
{
if (jaExisteVertice(g, id)) //nao deixa inserir dois vertices iguais
printf("Ja existe um vértice com esse ID, vértice não inserido.\n");
else if (!jaExisteVertice(g, id)) //se nao existe vertice igual. Redundante mas garantido
{
vertice *v = (vertice*) malloc(sizeof(vertice));
if (g->ini != NULL)
{
vertice *aux = g->ini;
while (aux->prox != NULL)
{
aux = aux->prox;
}
aux->prox = v;
}
else { // quando for o primeiro vertice do grafo
g->ini = v;
}
v->idVertice = id;
g->tamanho++;
}
printGrafo(g);
}
jaExisteVertice (g, id);
int jaExisteVertice(grafo *g, int idVertice)
{
vertice *v = g->ini;
while (v != NULL)
{
if (v->idVertice == idVertice)
return 1;
v = v->prox;
}
return 0;
}
Не могу понятьпочему у меня появляется эта ошибка, мой код, кажется, в порядке, я рассмотрел ее несколько раз построчно.Единственное, что не было сделано для проверки правильности malloc.
Я перепроверил свой алгоритм на случай, если список не пуст, поэтому он вставляется в конец моего динамического списка и, похоже, не имеет проблем с кодом,В теории не должно быть проблем в разных операционных системах, если код в порядке.
Windows 10, Codeblocks 16.01 в опциях компилятора: GNU GCC - Get Error
Использование встроенных спецификаций.COLLECT_GCC = gcc COLLECT_LTO_WRAPPER = / usr / lib / gcc / x86_64-pc-cygwin / 6.4.0 / lto-wrapper.exe Цель: x86_64-pc-cygwin Настраивается с помощью: / cygdrive / i / szsz / tmpp / gcc / gcc-6.4.0-5.x86_64 / src / gcc-6.4.0 / configure --srcdir = / cygdrive / i / szsz / tmpp / gcc / gcc-6.4.0-5.x86_64 / src / gcc-6.4.0 --prefix = / usr --exec-prefix = / usr --localstatedir = / var --sysconfdir = / etc --docdir = / usr / share / doc / gcc --htmldir = / usr / share / doc / gcc /html -C --build = x86_64-pc-cygwin --host = x86_64-pc-cygwin --target = x86_64-pc-cygwin --with-libiconv-prefix --without-libintl-prefix --libexecdir = / usr/ lib --enable-shared --enable-shared-libgcc --enable-static --enable-специфичный для версии-runtime-libs --enable-bootstrap --enable -__ cxa_atexit --with-dwarf2 --with-tune= универсальный --enable-languages = ada, c, c ++, fortran, lto, objc, obj-c ++ --enable-графит --enable-threads = posix --enable-libatomic --enable-libcilkrts --enable-libgomp--enable-libitm --enable-libquadmath --enable-libquadmath-support --disable-libssp --enable-libada --disable-symvers --with-gnu-ld --with-gnu-as --with-cloog-include = / usr / include / cloog-isl --without-libiconv-prefix --without-libintl-prefix --with-system-zlib --enable-linker-build-id --with-default-libstdcxx-abi = gcc4-совместимая модель потока: posix gcc версии 6.4.0 (GCC)
Linux Ubuntu - кодовые блоки 13.12, те же параметры компилятора - Без проблем
Linux Ubuntu - компиляция с терминалом - Без проблем
Использование встроенных спецификаций.COLLECT_GCC = gcc COLLECT_LTO_WRAPPER = / usr / lib / gcc / x86_64-linux-gnu / 5 / lto-wrapper Цель: x86_64-linux-gnu Настраивается с: ../src/configure -v --with-pkgversion = 'Ubuntu 5.4.0-6ubuntu1 ~ 16.04.9 '--with-bugurl = file: ///usr/share/doc/gcc-5/README.Bugs --enable-languages = c, ada, c ++, java, go, d, fortran, objc, obj-c ++ --prefix = / usr --program-суффикс = -5 --enable-shared --enable-linker-build-id --libexecdir = / usr / lib --without-includes-gettext --enable-threads = posix --libdir = / usr / lib --enable-nls --with-sysroot = / --enable-clocale = gnu --enable-libstdcxx-debug --enable-libstdcxx-time =да --with-default-libstdcxx-abi = новый --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt = gtk --enable-gtk-cairo --with-java-home = / usr / lib / jvm / java-1.5.0-gcj-5-amd64 / jre --enable-java-home --with-jvm-root-dir = / usr / lib / jvm / java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir = / usr / lib / jvm-exports /java-1.5.0-gcj-5-amd64 --with-arch-directory = amd64 --with-ecj-jar = / usr / share / java / eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32 = i686 --with-abi= m64 --with-multilib-list = m32, m64, mx32 --enable-multilib --with-tune = универсальный --enable-проверочный = выпуск --build = x86_64-linux-gnu --host = x86_64-linux-gnu --target = x86_64-linux-gnu Модель потока: posixgcc версия 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.9)