구조체 배열을 초기화 할 수 없습니다.

매니쉬 엄마

memset을 사용하여 구조체 유형의 배열 셀을 초기화하려고합니다. 프로그램은 성공적으로 컴파일되지만 Valgrind는 이러한 셀을 memseting하는 것과 관련된 것에 만족하지 않습니다. 주석 처리 된 코드도 작동하지 않습니다.

#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>

#define MAX_DATA 512
#define MAX_ROWS 100



struct Address {
        int id;
        int set;
        char name[MAX_DATA];
        char email[MAX_DATA];
};

struct Database{
        struct Address rows[MAX_ROWS];
};

struct Connection{
        FILE* file;
        struct Database* db;
};


void die(const char* message)
{
        if(errno){
                perror(message);
        }else{
                printf("ERROR: %s\n", message);
        }
        exit(1);
}



void Database_load(struct Connection* conn)
{
        int rc = fread(conn->db, sizeof(struct Database), 1, conn->file);
        if (rc != 1)
        {
                die("Failed to load database.");
        }
}


struct Connection* Database_open(const char* filename, char mode)
 {
        struct Connection* conn = malloc(sizeof(struct Connection));
        if (!conn)
        {
                die("Memory error");
        }

        if (mode == 'c')
        {
                conn->file = fopen(filename, "w");
        }
        else
        {
                conn->file = fopen(filename, "r+");

                if(conn->file) {
                        Database_load(conn);
                }
        }

        if(!conn->file) die("Failed to open file");
        return conn;
}


void Database_create(struct Connection* conn)
{
        int i = 0;

        for(i = 0; i < MAX_ROWS; i++) {
                //struct Address addr = {.id = i, .set = 0};
                //conn->db->rows[i] = addr;
                memset(&(conn->db->rows[i]), 0, sizeof(struct Address));
                conn->db->rows[i].id = i;
        }
}




int main(int argc, char* argv[])
{
        if(argc < 3) die("USAGE: ex17 <dbfile> <action> [action params]");

        char* filename = argv[1];
        char action = argv[2][0];
        struct Connection* conn = Database_open(filename, action);
        int id = 0;
        if(argc > 3) id = atoi(argv[3]);
        if(id >= MAX_ROWS) die("There's not that many records.");


        Database_create(conn);

        return 0;
}                        

관련 Valgrind 오류-

==16227== Conditional jump or move depends on uninitialised value(s)
==16227==    at 0x4C3009C: memset (vg_replace_strmem.c:1224)
==16227==    by 0x400BA8: Database_create (ex17.c:108)
==16227==    by 0x400EE1: main (ex17.c:174)
4386427

코드가 초기화되지 않습니다. conn->db

다음과 같은 것이 필요합니다.

conn->db = malloc(sizeof(struct Database));
if (!conn->db) 
{
    die("Memory error");
}

Database_open기능 내부

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

구조체 내에서 구조체 배열을 초기화 할 수 없습니다.

구조체에서 char 배열을 초기화 할 수없는 이유

이동: 구조체를 초기화할 수 없습니다.

포함 된 구조체를 초기화 할 수 없습니다.

쉽게 구성 할 수없는 객체의 배열을 초기화합니다.

구조체 객체와 함께 사용하면 배열을 초기화 할 수 있습니까? | 씨#

배열을 디코딩 할 때 배열을 Go 구조체로 역 정렬화할 수 없습니다.

2D 배열을 초기화 할 수 없습니다.

{0}로 부동 배열을 초기화 할 수 없습니다.

문자 배열을 초기화 할 수 없습니다.

이 배열을 초기화할 수 없습니다. React Native

조건부로 배열을 초기화 할 수 있습니까?

두 개의 겹치는 구조체에서 초기화 목록을 사용할 수 없습니다.

C : 왜 중괄호가있는 배열 내부의 구조체를 초기화 할 수 없습니까?

Trie 생성자에서 참조 배열을 초기화 할 수 없습니까?

기본값으로 구조체를 초기화 할 수 없습니다.

JSON을 구조체로 역 정렬 화 : 배열을 Go 값으로 역 정렬화할 수 없습니다.

전역 범위에서 const 구조체를 사용하여 구조체 배열을 어떻게 초기화 할 수 있습니까?

C : 구조체의 문자열을 배열에 할당 할 수 없습니다.

Go에서 if 구조를 초기화 할 수 없습니다.

구조체 초기화 내부에 배열을 만들 수 있습니까?

값을 정수 배열로 처음 초기화 한 후 다시 초기화 할 수 없습니다.

구조체 속성에 배열을 할당 할 수 없습니다.

구조체 배열을 C에서 함수로 전달할 수 없습니다.

uint8 유형으로 배열을 초기화 할 수 없습니다.

C에서 큰 2D 배열을 초기화 할 수 없습니다.

복사 생성자에서 배열을 초기화 할 수 없습니다.

new Array(n).map((_, index) => index)는 배열을 초기화할 수 없습니다.

Kotlin-컴패니언 객체 값을 초기화 할 수 없습니다.

TOP 리스트

  1. 1

    C # 16 진수 값 0x12는 잘못된 문자입니다.

  2. 2

    Matlab의 반복 Sortino 비율

  3. 3

    Python의 csv 파일에서 첫 번째 열 삭제

  4. 4

    개체 참조가 개체의 인스턴스로 설정되지 않았습니까? (예외 오류 ~ ASP.NET MVC)

  5. 5

    atob은 인코딩 된 base64 문자열을 디코딩하지 않습니다.

  6. 6

    EventEmitter <string>의 컨텍스트 'this'가 Observable <string> 유형의 'this'메서드에 할당되지 않았습니다.

  7. 7

    병합 셀을 사용하여 워크 시트의 데이터 필터링

  8. 8

    PhpStorm 중단 점에서 변수 값을 볼 수 없습니다.

  9. 9

    jQuery에서 이벤트 핸들러를 제거하는 가장 좋은 방법은 무엇입니까?

  10. 10

    `@ Transactional`이 있음에도 불구하고 이러한 데이터베이스 수정 사항이 롤백되지 않는 이유는 무엇입니까?

  11. 11

    ssh를 사용하여 원격에서 로컬로 파일 복사

  12. 12

    종속 사용자 정의 Lightning 선택 목록 Level2 및 Level3을 설정한 다음 Lightning 구성 요소에서 Level2를 재설정하지만 Level2 캐시 데이터가 저장됨

  13. 13

    2 개의 이미지를 단일 평면 이미지로 결합

  14. 14

    팝업처럼 위젯을 표시하는 방법

  15. 15

    [해결] 쿠키 설정 SameSite = Chrome / JSP, JAVASCRIPT에서 작동하지 않습니다.

  16. 16

    버튼 클릭을 기반으로 특정 CSS 클래스를 추가하는 방법은 무엇입니까?

  17. 17

    React 구성 요소가 자동으로 초기 상태로 다시 렌더링됩니다.

  18. 18

    연결된 서버 쿼리는 작동하지만 동일한 OPENQUERY는 "sys.servers에서 서버 'SERVER'를 찾을 수 없습니다.

  19. 19

    파일 2의 파일 1에서 동일한 줄을 조건으로 바꿉니다.

  20. 20

    아이디어 Intellij : 종속성 org.json : json : 20180813을 찾을 수 없음, maven에서 org.json 라이브러리를 가져올 수 없음

  21. 21

    상황에 맞는 메뉴 색상

뜨겁다태그

보관