LINUX.ORG.RU

больше ненужных тегов!

anonymous
()
#!/bin/bash

rm -f a.out

g++ -x c++ - <<EOF
#include <stdio.h>
#include <stdlib.h>
struct SomeClass
{  static int* data;
   void static func()
   {
     data = (int*)(calloc(40, sizeof(int)));
     printf("data = %p\n", data);
   }
};
int* SomeClass::data;
int main(){
  SomeClass::func();
  return 0;
}
EOF

./a.out
anonymous
()
Ответ на: комментарий от andreyu

на malloc(): memory corruption же

p.s. Зачем нужна лишняя пара скобок?

да на всякий. а вообще, там изначально reinterpret_cast был.

next_time ★★★★★
() автор топика
Ответ на: комментарий от next_time

Такой пример тоже не работает?

g++ -x c++ - <<EOF
#include <stdio.h>
#include <stdlib.h>
static int* data;
int main(){
  data = (int*)(calloc(40, sizeof(int)));
  printf("data = %p\n", data);
  return 0;
}
EOF
и ещё замени:
g++ -x c++ - <<EOF
на
gcc -x c - <<EOF
ошибка при запуске тоже происходит?

anonymous
()

У тебя по-любому либо два раза вызывается SomeClass::func(), либо ты еще где-то некорректно работаешь с data.

grondek
()
Ответ на: комментарий от next_time

Что-то тут не то, это, видимо, далеко не весь код. Ругается не отладчик, а glibc. И это последствие ошибки, а не сама ошибка, которая где-то в другом месте повредила управляющие структуры heap. С valgrind будет проще найти где настоящая проблема.

xaizek ★★★★★
()
Ответ на: комментарий от anonymous

ошибка при запуске тоже происходит?

плюсовый же проект, не скомпилится. в с нет статических переменных внутри структур и функций внутри структур.

Такой пример тоже не работает?

так работает

next_time ★★★★★
() автор топика
Ответ на: комментарий от grondek

У тебя по-любому либо два раза вызывается SomeClass::func()

ровно 1. иначе попадал бы в неё отладчиком, соответственно 2(+) раза.

либо ты еще где-то некорректно работаешь с data.

допустим даже так, при calloc в этом случае должна возникнуть утечка памяти, а не вылет по memory corruption

next_time ★★★★★
() автор топика
Последнее исправление: next_time (всего исправлений: 1)
Ответ на: комментарий от next_time

плюсовый же проект, не скомпилится.

а что ты под отладкой тогда запускал?

в с нет статических переменных внутри структур и функций внутри структур.

имелся ввиду запуск примера без структур с gcc компилятором.

anonymous
()
Ответ на: комментарий от anonymous

а что ты под отладкой тогда запускал?

скомпилированный бинарник

next_time ★★★★★
() автор топика
Ответ на: комментарий от next_time

все с тобой ясно, продолжай

anonymous
()

memtest попробуй прогнать для начала

mazdai ★★★
()
Ответ на: комментарий от next_time

на malloc(): memory corruption же

Ну так давайте пример кода, где это происходит. То, что я вижу в топике не должно портить память.

andreyu ★★★★★
()

Во-первых, кто тебя учил такому адовому форматированию? Во-вторых, где минимальная компилирующаяся и запускающаяся программа на которой проявляется проблема?

Reset ★★★★★
()

Проблема, скорее всего, где-то в другом месте. Такие баги бывают, если начать писать в какую-то левую память и случайно «переехать» служебную информацию malloc'а. valgrind тебе в помощь

Gvidon ★★★★
()
Ответ на: комментарий от xaizek

ага, спасибо. действительно, слегка был сбит с толку: подумал, может баг какой в гцц опять, версия-то старая. на самом деле, достаточно быстро нашёл место, в котором производился доступ к уже освобождённой памяти. даже валгринд не потребовался.

next_time ★★★★★
() автор топика
Ответ на: комментарий от ck114

и что будет? кто-то станет ковыряться в таком достаточно большом проекте?

next_time ★★★★★
() автор топика
Ответ на: комментарий от next_time

Во-первых, это Horstmann.

Ну и? Говно ведь. Читать не удобно и писать не удобно. Не советую так писать — коллеги побьют.

Во-вторых, она черезчур большая, чтобы на ЛОР её вот так запостить.

Тогда советую выучить утилиты разработки и отладки прежде чем постить случайный кусок из неработающей программы.

Reset ★★★★★
()
Ответ на: комментарий от Reset

и писать не удобно.

Правая кнопка мыши -> Format use AStyle

Читать не удобно

как раз наоборот, целая строчка экономится. отдавать её под единственную скобку — перебор

Тогда советую выучить утилиты разработки и отладки прежде чем постить случайный кусок из неработающей программы.

надеялся что это какой-то баг гцц. впрочем, как оказалось, зря боялся — нашёл, в итоге, где проблема, безо всяких сторонних утилит.

next_time ★★★★★
() автор топика
Последнее исправление: next_time (всего исправлений: 1)
Ответ на: комментарий от next_time

она черезчур большая, чтобы на ЛОР её вот так запостить.

поэтому тебе следует напрячься и написать на ее основе минимальную программу на которой проявляется твоя проблема.

anonymous
()
Ответ на: комментарий от next_time

целая строчка экономится. отдавать её под единственную скобку — перебор

Экономить можно иначе - оставив её на предыдущей строке. По моему, этот вариант гораздо чаще встречается. И не зря.

DarkEld3r ★★★★★
()
Ответ на: комментарий от next_time

как раз наоборот, целая строчка экономится.

Hint:

int foo()
{// это комментарий видно если складка свёрнута
  // code
  return 0;
}

emulek
()
Ответ на: комментарий от next_time

ИМХО заголовок функции и тело функции — разные сущности, и должны быть разделены комментарием или пустой строкой, если комментарий очевиден.

emulek
()
Ответ на: комментарий от unt1tled

/* комментарии к функциям надо писать * вот тут

а если для этой функции(блока) многострочный комментарий не нужен?

PS: править можно.

emulek
()
Последнее исправление: emulek (всего исправлений: 1)
Ответ на: комментарий от emulek
/* нууу... тогда можно написать однострочный :) */
int foo() {
  // code
  return 0;
}

PS: вот это malloc: memory corruption (комментарий) сообщение я править не мог еще до ответа на него

unt1tled ★★★★
()
Последнее исправление: unt1tled (всего исправлений: 1)
Ответ на: комментарий от unt1tled

не знаю, у меня такая же ерунда случается — возможность правки достаточно быстро пропадает.

next_time ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.