После завершения программы, выдается не понятное сообщение...
Написал программу, которая возводит число в степень.
Компилирую: g++ -o s st.cpp
Все в порядке, ни каких сообщений.
Запускаю программу: ./s
Программа выполняется. После завершения программы, выдается сообщение:
Цитата:
934:
934: calling fini: /usr/lib/libstdc++.so.5 [0]
934:
934:
934: calling fini: /lib/libm.so.6 [0]
934:
934:
934: calling fini: /usr/lib/libgcc_s.so.1 [0]
934:
934:
934: calling fini: /lib/libc.so.6 [0]
934:
934: calling fini: /usr/lib/libstdc++.so.5 [0]
934:
934:
934: calling fini: /lib/libm.so.6 [0]
934:
934:
934: calling fini: /usr/lib/libgcc_s.so.1 [0]
934:
934:
934: calling fini: /lib/libc.so.6 [0]
934:
Не могу понять, к чему относиться данное сообщение.
Программа выполнилась успешно. Файл создан. В него помещены
нужные данные. Но беспокоит сообщение.
Помогите, пожалуйста, разобраться.
Исходник программы:
Цитата:
#include <iostream>
#include <cstdlib>
using namespace std;
void term_func(void) { cout << "Happy end?\n"; }
int main() {
FILE *fp;
char *buf;
fp = fopen("st.txt","w");
int r;
for (int i=2; i<=9; i++)
{
r=1;
for (int j=1; j<=9; j++)
{
r*=i;
sprintf(buf,"%i",i);
fputs(buf,fp);
fputs("^",fp);
sprintf(buf,"%i",j);
fputs(buf,fp);
fputs("=",fp);
sprintf(buf,"%i",r);
fputs(buf,fp);
fputs("\n",fp);
}
fputs("\n",fp);
}
fclose(fp);
atexit(&term_func);
return 0;
}
#include <cstdlib>
using namespace std;
void term_func(void) { cout << "Happy end?\n"; }
int main() {
FILE *fp;
char *buf;
fp = fopen("st.txt","w");
int r;
for (int i=2; i<=9; i++)
{
r=1;
for (int j=1; j<=9; j++)
{
r*=i;
sprintf(buf,"%i",i);
fputs(buf,fp);
fputs("^",fp);
sprintf(buf,"%i",j);
fputs(buf,fp);
fputs("=",fp);
sprintf(buf,"%i",r);
fputs(buf,fp);
fputs("\n",fp);
}
fputs("\n",fp);
}
fclose(fp);
atexit(&term_func);
return 0;
}
_fini - это функция финализции приложения, генерируемая компилятором gcc.
такой вывод связан с ошибкой в программе. выделите явно память под buf и "странный вывод исчезнет". думаю, что из-за данной ошибки сбивается стек, в который помещаются параметры динамически связанных библиотек, что и приводит к подобным последствиям.
если слинковать ELF файл статически:
g++ -static -o s st.cpp
странный вывод тоже пропадет.
squirL, спасибо за ответ.
Цитата:
Originally posted by Wilmer
squirL, спасибо за ответ.
squirL, спасибо за ответ.
не за что... меня вопрос цепанул :) если соберусь - напишу ПОЧЕМУ так происходит.