Во-первых, используйте setbuf(stdout, NULL);
, если вы хотите, чтобы ваши отпечатки сбрасывались до того, как ваша программа неожиданно завершит работу.
Во-вторых, как уже упоминали другие, вы получаете доступ к элементу указателя NULL
в while (value >= (curptr->data))
, который вызывает сбой.
В-третьих, ваша insert
и print
логика также неверна.
#include <stdio.h>
#include <stdlib.h>
struct record{
int data;
struct record *nextptr;
};
void insert (struct record **ptr,int value);
void printList(struct record *ptr);
int main() {
setbuf(stdout, NULL);
struct record *headptr = NULL;
for (int i = 0; i < 4; ++i) {
int data;
printf("Enter your value");
scanf("%d", &data);
insert(&headptr, data);
}
printList(headptr);
return 0;
}
void insert (struct record **head,int value){
printf("WE ARE IN THE INSERT FUNCTION");
struct record *newptr = (struct record *) malloc(sizeof(struct record));
newptr->data=value;
newptr->nextptr=NULL;
struct record *curptr=*head;
struct record *prevcurptr=NULL;
while(curptr!=NULL && value >= (curptr->data)){
prevcurptr=curptr;
curptr=curptr->nextptr;
}
if (curptr==NULL){
if (prevcurptr==NULL) {
*head=newptr;
} else {
newptr->nextptr=prevcurptr->nextptr;
prevcurptr->nextptr=newptr;
}
}
else{
newptr->nextptr=curptr;
if (prevcurptr==NULL)
*head=newptr;
else
prevcurptr->nextptr=newptr;
}
}
void printList(struct record *ptr){
while(ptr != NULL){
printf("\n %d", ptr->data);
ptr=ptr->nextptr;
}
}
На моем рабочем месте мы используем AQTime. Это не свободно (600$ или 30-дневная пробная версия), но это действительно творит чудеса. Мне нравится он, потому что это может обработать оба собственных компонента (мы делаем C++), и управляемый код. Это работает в автономном режиме, интегрируется с Visual Studio и также работает с IDE Borland (для тех Разработчик C++ и поклонники Delphi там).
Но я буду наблюдать этот вопрос видеть, существуют ли какие-либо бесплатные инструменты, которые я могу использовать дома =)
Другое голосование за AQTime. Мы были действительно довольны им. Но конечно это не свободно, как Вы попросили...
Я попробовал CodeAnalyst однажды, но насколько я видел, что он делал опрос, а не инструментарий, и следовательно дал довольно сырые результаты. Не нашли свободных профилировщиков для Windows, который я любил лучше, чем это.
VTune Intel или CodeAnalyst AMD оба свободны, я верю.
Бесплатный профилировщик для VS 2008: http://unick-soft.ru/Articles.cgi?id=8 Это русская статья, но вы можете воспользоваться переводом google com.
Эта техника бесплатна и хорошо работает в Visual Studio.
Microsoft предоставляет автономную версию профилировщика, которую можно использовать из командной строки. http://www.microsoft.com/downloads/details.aspx?familyid=fd02c7d6-5306-41f2-a1be-b7dcb74c9c0b&displaylang=en