메모리를 확보하는 동안 분할 오류 오류

user11729819

목록에 대한 자체 제작 프로그램을 만들려고했습니다. 그래서 저는 목록을 만들고, 새 노드를 추가하고, 표시하고, 목록에있는 모든 기존 노드를 삭제하는 것과 같은 기본적인 것들을 만들었습니다.

그러나 목록에 27 개 이상의 요소를 넣으면 메모리를 해제하는 동안 분할 오류 오류가 발생합니다. 덧붙여서 26 개 이하로 추가하면 잘 작동합니다. 스택이 넘쳐나거나 그런 것 같으면 정말 모르겠어요.

추신은 내가 자전거를 개발하고 있다고 말하지 않습니다. 이런 식으로 먼저 스스로 무언가를 만들고, 더 잘 이해합니다.)

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

typedef struct node{
    struct node * next;
    int value;
} node;

int addNode(int position,int value, node ** head,int * size){
    int i = 2;
    node * curNode = *head;
    if(position > *size) return;
    while(i <= *size){
        if(position == 1){
            node * adress = *head;
            *head = (node*) malloc(sizeof(node*));
            (*head)->next = adress;
            (*head)->value = value;
            break;
        }

        else if(i == position){
            node * adress = curNode->next;
            curNode->next = (node*) malloc(sizeof(node*));
            curNode = curNode->next;
            curNode->next = adress;
            curNode->value = value;
            break;
        }
        else{
            curNode = curNode->next;            
            ++i;            
        }       
    }   
    ++(*size);      
    return;     
}

void showList(node * head, int size){
    int i; node * currentNode = head;
    for(i = 0; i < size; ++i){
        printf(" %d , next adress: %p |\n", currentNode->value, currentNode->next);
        currentNode = currentNode->next;
    }
    printf("\n");
}

void cleanList(node * head, int size){
    int i;
    node * curNode = head; node * nextToDelete = NULL;
    for(i = 0; i < size; ++i){
        nextToDelete = curNode->next;
        free(curNode);
        curNode = nextToDelete;
    }
}

int main() {
    node * head = (node*) malloc(sizeof(node*)); //saving head adress to know where the list starts
    head->value = 1; //set head value as "1"    
    int i, size;    
    node * currentNode = head; //pointer which points to a current node     
    for(i = 0; i < 5; ++i){         
        node * adress = (node*) malloc(sizeof(node*)); //variable which saves new node`s adress
        currentNode->next = adress; //set this new nod`s adress to previous node`s "next" parametr      
        currentNode = adress; //set new node`s adress to a current node 
        currentNode->value = i+2; ///set value for this node    
    }   
    size = 6;       
    addNode(2, 15, &head, &size);  
    showList(head, size);
    showList(head, size);  
    cleanList(head, size);
    return 0;
}
Lev M.

메모리를 잘못 할당하고 있습니다.

다음 줄에 유의하십시오.

*head = (node*) malloc(sizeof(node*));

curNode->next = (node*) malloc(sizeof(node*));

struct node실제 구조체 대신 포인터에 메모리를 할당 하고 있습니다. 함수에
주목하십시오 sizeof-잘못된 매개 변수를 전달했습니다!

구조에는 int및 포인터가 있습니다. 그것들은 보통 같은 크기입니다.
하지만 포인터에 메모리 만 할당하므로 구조의 절반 만 할당합니다.

이로 인해 free어느 시점에서 잘못된 주소 로 전화를 겁니다 . 프로그램이 free작동 중에 만 충돌 한 것은 기적 입니다. 훨씬 빨리 충돌 했어야합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

malloc을 사용하여 런타임에 메모리를 할당하는 동안 분할 오류

분류에서Dev

배열에 int를 할당하는 동안 분할 오류

분류에서Dev

분할 된보기를 만드는 동안 Hive 오류

분류에서Dev

포인터 배열에 메모리를 할당하는 동안 세그 오류

분류에서Dev

포인터를 해제하는 동안 분할 오류

분류에서Dev

MPI_Type_contiguous를 사용하는 동안 분할 오류

분류에서Dev

C ++에서 삭제를 사용하는 동안 분할 오류

분류에서Dev

argv []를 사용하는 동안 분할 오류

분류에서Dev

MPI 및 OpenCV를 함께 사용하는 동안 분할 오류

분류에서Dev

문자열 버퍼를 복사하는 동안 분할 오류

분류에서Dev

iOS 애플리케이션 (Swift)을 보관하는 동안 "분할 오류 : 11"

분류에서Dev

memcpy를 사용하는 동안 메모리 오류?

분류에서Dev

목록을 확장하는 동안 메모리 오류

분류에서Dev

이진 검색 트리에 삽입하는 동안 분할 오류

분류에서Dev

std :: deque를 반복하는 동안 요소를 지울 때 분할 오류

분류에서Dev

포인터 구조체의 일부를 인쇄하는 동안 분할 오류

분류에서Dev

Eigen에서 Lapack 함수를 호출하는 동안 분할 오류

분류에서Dev

Eigen에서 Lapack 함수를 호출하는 동안 분할 오류

분류에서Dev

2D 배열을 만드는 동안 메모리를 확보 할 위치는 어디입니까? valgrind 오류

분류에서Dev

문자열을 할당하는 동안 분할 오류

분류에서Dev

Android 활동의 UI를로드하는 동안 Java 메모리 부족 오류

분류에서Dev

NULL 포인터를 증가시키는 동안 예상되는 분할 오류

분류에서Dev

부팅하는 동안 오류를 일으키는 우분투

분류에서Dev

동적 페이지를 여는 동안 구문 분석 오류

분류에서Dev

큰 범위로 반복하는 동안 Python 메모리 오류

분류에서Dev

문자열을 비교하는 동안 분할 오류

분류에서Dev

keras에서 분류 코드를 실행하는 동안 오류 발생

분류에서Dev

C의 분할 오류 (문자열 생성, 중복을 확인하는 동안 오류 발생)

분류에서Dev

C-재귀를 사용하여 이진 트리를 생성하는 동안 분할 오류

Related 관련 기사

  1. 1

    malloc을 사용하여 런타임에 메모리를 할당하는 동안 분할 오류

  2. 2

    배열에 int를 할당하는 동안 분할 오류

  3. 3

    분할 된보기를 만드는 동안 Hive 오류

  4. 4

    포인터 배열에 메모리를 할당하는 동안 세그 오류

  5. 5

    포인터를 해제하는 동안 분할 오류

  6. 6

    MPI_Type_contiguous를 사용하는 동안 분할 오류

  7. 7

    C ++에서 삭제를 사용하는 동안 분할 오류

  8. 8

    argv []를 사용하는 동안 분할 오류

  9. 9

    MPI 및 OpenCV를 함께 사용하는 동안 분할 오류

  10. 10

    문자열 버퍼를 복사하는 동안 분할 오류

  11. 11

    iOS 애플리케이션 (Swift)을 보관하는 동안 "분할 오류 : 11"

  12. 12

    memcpy를 사용하는 동안 메모리 오류?

  13. 13

    목록을 확장하는 동안 메모리 오류

  14. 14

    이진 검색 트리에 삽입하는 동안 분할 오류

  15. 15

    std :: deque를 반복하는 동안 요소를 지울 때 분할 오류

  16. 16

    포인터 구조체의 일부를 인쇄하는 동안 분할 오류

  17. 17

    Eigen에서 Lapack 함수를 호출하는 동안 분할 오류

  18. 18

    Eigen에서 Lapack 함수를 호출하는 동안 분할 오류

  19. 19

    2D 배열을 만드는 동안 메모리를 확보 할 위치는 어디입니까? valgrind 오류

  20. 20

    문자열을 할당하는 동안 분할 오류

  21. 21

    Android 활동의 UI를로드하는 동안 Java 메모리 부족 오류

  22. 22

    NULL 포인터를 증가시키는 동안 예상되는 분할 오류

  23. 23

    부팅하는 동안 오류를 일으키는 우분투

  24. 24

    동적 페이지를 여는 동안 구문 분석 오류

  25. 25

    큰 범위로 반복하는 동안 Python 메모리 오류

  26. 26

    문자열을 비교하는 동안 분할 오류

  27. 27

    keras에서 분류 코드를 실행하는 동안 오류 발생

  28. 28

    C의 분할 오류 (문자열 생성, 중복을 확인하는 동안 오류 발생)

  29. 29

    C-재귀를 사용하여 이진 트리를 생성하는 동안 분할 오류

뜨겁다태그

보관