Я сделал телефонная книга программа в C (с динамическими структурами и т. д.).C программа - работает в Linux; Сбой при запуске в окнах
Он отлично работает под Linux, но когда я пытаюсь запустить его (после компиляции в devC++), в Windows он запускается нормально, но после добавления некоторых данных в список он просто останавливается и завершает работу. То, что происходит только добавлением новых данных в телефонную книгу. Когда я работаю с другими функциями, это нормально, никаких прерываний и так далее.
В начале модуля я приложил windows.h
и conio.h
для getch()
и systen("cls")
. Возможно, я использовал некоторые функции, которые не разрешены в Windows или что-то подобное.
Это мой первый c-проект, и, как правило, я работаю в Linux, так что я должен соблюдать?
/*SCREEN*/
#ifdef __WIN32__ /*for Windows*/
#include<windows.h>
#define GETCH printf("press ENTER...\n");getch()
#define CLEAR system("cls")
#endif
#ifdef __unix__ /*for unix*/
#include<unistd.h>
#define GETCH printf("\n\npress ENTER...");getchar()
#define CLEAR system("clear")
#endif
Я также добавить имя и pnonenumber так же
printf("++ ADD DATA: ++\n");
/*LASTNAME*/
printf(">> add lastname : ");
fgets(buf,128,stdin);
lastname = malloc(strlen(buf)); /*allocate memory for lastdane*/
if(lastname != NULL) /*successful allocation*/
{
strcpy(lastname, buf); /*copy data from buf to lastname variable*/
lastname[strlen(lastname)-1]='\0';/*get the number of elements and add '\0' at the end*/
}
else /*allocation failed*/
{
printf("Memory Allocation Error!");
}
memset(buf,0,128);
void AddDATAsorted(char* lastname, char* firstname, char* telnumber)
{
tDATA* pDATA;
if(pTELBOOK)
{
pDATA = malloc(sizeof(tDATA)); /*allocate memory for new item*/
pDATA->lastname = lastname;
pDATA->firstname = firstname;
pDATA->telnumber = telnumber;
addItemToList(pTELBOOK, pDATA, fcmp); /*add a new item sorted - see list.c*/
}
} /*END 6*/
ИТС в другом модуле.
int fcmp(void* pItemList, void* pItemNew)
{
tDATA* pDATA_list;
tDATA* pDATA_new;
int diff;
if(pItemList != NULL)
{
pDATA_list = (tDATA*) pItemList; /*because void-pointer */
pDATA_new = (tDATA*) pItemNew;
diff = strcmp(pDATA_list->lastname, pDATA_new->lastname);
if(diff != 0) return diff;
else /*if items have the same lastname*/
{
diff = strcmp(pDATA_list->firstname, pDATA_new->firstname);
if(diff != 0) return diff;
else /*if items have also the same firstname*/
{
diff = strcmp(pDATA_list->telnumber, pDATA_new->telnumber);
if(diff != 0) return diff;
else return FAIL; /*if items - equal*/
}
}
}
else return OK;
отладчик всегда показывает, что здесь не так л ...
/* 2 * Функция: удаление данных */
int RemoveDATA(void)
{
tDATA* pDATA = NULL;
if(pTELBOOK == NULL) return FAIL;
else /*if pTELBOOK's current element - not empty - free allocated memory*/
{
if(pTELBOOK->pCurr != NULL)
{
pDATA = pTELBOOK->pCurr->pItem;
free(pDATA->lastname);
free(pDATA->firstname);
free(pDATA->telnumber);
free(pTELBOOK->pCurr->pItem);
RemoveItem(pTELBOOK); /*and remove element from the list*/
return OK;
}
}
} /*END 2*/
Вы получите гораздо более полезную обратную связь, если вы разместите свой код. Или небольшой пример, если ваш код слишком длинный для полезной публикации. – simonc
Запустите программу под отладчиком, чтобы вы могли следить за тем, что она делает? – stijn
Ваша программа, скорее всего, сбой. Используйте отладчик, чтобы узнать где и вернуться с более конкретным вопросом, который может предоставить соответствующий код. – millimoose