(제1장1) 유니버설 쌍방향 체인 테이블 - 리셋 함수
3378 단어 콜백 함수
(1) 정확:
DListNode *a=(DListNode *)malloc(sizeof(DListNode));
a->data=(void *)2;
(2) 오류:
DListNode *a;
a->data=(void *)2;
잘못된 Segmentation fault (core dumped)
A. Core란?
반도체를 메모리의 재료로 사용하기 전에 인류는 코일을 메모리의 재료로 삼았다(발명자는 왕안), 코일을 코어라고 하고, 코일로 만든 메모리를 코어 메모리라고 한다.오늘날 반도체 공업이 급속히 발전하여 이미 코어 메모리를 사용하는 사람이 없어졌다. 그러나 많은 상황에서 사람들은 여전히 기억체를 코어라고 부른다.
B. Core Dump이란?
우리가 프로그램을 개발(또는 사용)할 때 가장 두려워하는 것은 프로그램이 영문도 모른 채 넘어가는 것이다.비록 시스템은 괜찮지만, 우리는 다음에도 같은 문제에 부딪힐 수 있다.그래서 이 때 운영체제는 프로그램이 떨어졌을 때의 메모리 내용을dump로 출력합니다. (지금은 보통 코어라는 파일에 쓰여 있습니다.) 우리나 debugger를 참고로 합니다.이 동작을 코어 덤프라고 부른다.
컴퓨터 용어에서 Dump의 뜻을 살펴보자.
V-T To dump computer data or memory means to copy it from one storage system onto another, such as from disk to magnetic tape. 덤프[컴퓨터]
C. 메모리 한계 또는 불법 주소 접근!!!그룹, 문자열, 바늘,malloc가 분배한 메모리 영역을 보십시오
D. 잘못된 쓰기 방법을 사용한다면 gdb 디버깅을 어떻게 사용합니까?
[hadoop@sam1 dlist_print]$ g++ -g DList.cpp -o DList
[hadoop@sam1 dlist_print]$ ./DList
Segmentation fault (core dumped)
[hadoop@sam1 dlist_print]$ gdb
(gdb) file DList
Reading symbols from /home/hadoop/Desktop/testGCC/dlist_print/DList...done.
(gdb) run
Starting program: /home/hadoop/Desktop/testGCC/dlist_print/DList
Program received signal SIGSEGV, Segmentation fault.
0x080484a5 in main () at DList.cpp:68
warning: Source file is more recent than executable.
68 a->data=(void *)2;
(gdb)
(gdb) where down
#0 0x080484a5 in main () at DList.cpp:68
2.malloc()를 사용하려면 #include
3. printf ()를 사용하려면 #include
4. 컴파일 및 실행
[hadoop@sam1 dlist_print]$ g++ DList.cpp -o DList
[hadoop@sam1 dlist_print]$ ./DList
23
코드 단순화:
#include <stdio.h>
#include <stdlib.h>
//
typedef int DListRet;
typedef DListRet (*DListDataPrintFunc)(void *data);
#define DLIST_RET_OK 1
#define DLIST_RET_STOP 2
typedef struct _DListNode{
struct _DListNode* prev;
struct _DListNode* next;
void* data;
}DListNode;
typedef struct _DList{
DListNode *first;
}DList;
//" "
//DListRet dlist_print(DList *list, DListDataPrintFunc printFun);
DListRet dlist_print(DList *list, DListDataPrintFunc printFun){
DListNode *iter=list->first;
while(iter!=NULL){
printFun(iter->data);
iter=iter->next;
}
}
//" "
//DListRet print_int(void *data);
DListRet print_int(void *data){
printf("%d",(int)data);
return DLIST_RET_OK;
}
int main(){
//
DListNode *a;
DListNode *b=(DListNode *)malloc(sizeof(DListNode));
a->data=(void *)2;
b->data=(void *)3;
a->next=b;
a->prev=NULL;
b->next=NULL;
b->prev=a;
DList *list=(DList *)malloc(sizeof(DList));
list->first=a;
//
dlist_print(list,print_int);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
콜백 함수2020년 6월 13일 Progate Lv.87 자바스크립트 Ⅶ JavaScript에서는, 인수에 함수를 건네줄 수가 있어, 인수에 건네지는 함수를 콜백 함수라고 한다. 함수의 호출시에 건네지는 함수의 종류에는, 캐...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.