メモリ割り当て中のヒープの破損

イシャイ

テキストファイルからCの構造体のリンクリストに読み込もうとしています。

プログラムでは、.hファイルに構造体定義があります。

typedef struct SystemDetails *SyDetails;

構造体自体は、.cppファイルで次のように定義されています。

struct SystemDetails //stores system users data from the list
{
char fname[20],lname[20],password[7],email[30],SQuestion[10],SAnswer[10];
long unsigned int id;
int memory_alloc, request_ind,delete_ind;
SystemDetails *next;
};

ファイルとデータ転送を処理する関数は次のとおりです。

SyDetails System_Data()
{
FILE *fp=NULL;
SyDetails head=NULL,curr=NULL;
char fname[20],lname[20],password[7],email[30],SQuestion[10],SAnswer[10];
long unsigned int id=0;
int memory_alloc=0,request_ind=0,delete_ind=0;
fp=fopen("SystemList.txt","r+");
if(fp==NULL)//if file doesn't exist on the pc open a new file
{

    printf("error,file cant open\n");
    exit(-1);

}
else
{

    while(fscanf(fp, "%s %s %d %s %s %s %s %d %d %d", &fname,&lname,&id,&email,&password,&SQuestion,&SAnswer,&memory_alloc,&request_ind,&delete_ind)!=EOF)
    {
        if(head==NULL)
        {
            head=(SyDetails) malloc(sizeof (SyDetails));
            curr=head;
        }
        else
        {

            curr->next=(SyDetails) malloc(sizeof (SyDetails));
            curr=curr->next;
        }
        strncpy(curr->fname, fname, 20);
        strncpy(curr->lname, lname, 20);
        curr->id=id;
        strncpy(curr->email, email, 30);
        strncpy(curr->password, password, 10);
        strncpy(curr->SQuestion, SQuestion, 10);
        strncpy(curr->SAnswer, SAnswer, 10);
        curr->memory_alloc=memory_alloc;
        curr->request_ind=request_ind;
        curr->delete_ind=delete_ind;
        curr->next=NULL;

    }

}
return head;


}

とにかくテキストファイルは3つのレコードを持って、最初の行は動作しますときhead==NULLが、機能がになる2回目elsemallocそれがでクラッシュしたリンクリストの次のノードmallocラインと私が言うエラーが表示されます。

"Windows has triggered a breakpoint in final-project.exe.

これは、ヒープの破損が原因である可能性があります。これは、ヒープfinal-project.exeまたはロードされたDLLのいずれかにバグがあることを示しています。

これは、ユーザーがフォーカスF12final-project.exe持っているときに押したことが原因である可能性もあります。

出力ウィンドウには、より多くの診断情報が含まれている可能性があります。」

私の推測では、関数でポインターを定義した方法に何かがあると思います。

私はどんな助けにも感謝します、ありがとう!

user529758

この線

head=(SyDetails) malloc(sizeof (SyDetails));

2つの点で間違っています。まず、メモリを破損している理由:SyDetailsはポインタであるためsizeof(pointer)、必要なバイト数よりも少ないバイトのみが割り当てられますsizeof(struct SystemDetails)。これを変更する必要があります。さらに良いことにsizeof(*head)、タイプがhead変更された場合に備えて安全になるように変更してください。

2つ目は、Cでは、の戻り値をキャストしてはならないということですmalloc()

概して:

head  = malloc(sizeof(*head));

あなたが本当に欲しいものです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

割り当て時のメモリ破損

分類Dev

割り当て時のメモリ破損

分類Dev

ヒープメモリの割り当て

分類Dev

CPythonメモリヒープ破損の問題

分類Dev

グローバル演算子のnew / deleteを置き換え、これらの中にメモリを割り当てて、ヒープの破損を引き起こします

分類Dev

スタックとヒープのJavaメモリ割り当て

分類Dev

Javaヒープとスタックメモリの割り当て

分類Dev

C ++ dllヒープメモリ割り当ての問題

分類Dev

リリースモードでのOpenCVヒープの破損

分類Dev

トップサイズが破損したメモリメモリ割り当てエラーが発生する

分類Dev

JVMのメモリ割り当てとJavaのメモリ不足について:ヒープスペース

分類Dev

C ++のメモリ割り当て領域(スタックvsヒープvs静的)

分類Dev

ヒープに少しのメモリを割り当てますか?

分類Dev

スタックとヒープへのメモリ割り当て量(c)

分類Dev

空のSwift文字列メモリ割り当てレイアウト(スタック/ヒープ割り当て)

分類Dev

メモリへのアクセスにおけるヒープの破損を理解する

分類Dev

std :: vector要素への割り当ては、メモリ破損につながります

分類Dev

SSEメモリコピーの実行によるヒープの破損-CRTチェックで何も見つかりません

分類Dev

ヒープメモリの割り当てがスタックメモリの割り当てよりもはるかに速いのはなぜですか?

分類Dev

カーネルモードのヒープの破損

分類Dev

Arcのジェネリック型のヒープ割り当てメモリをラップしますか?

分類Dev

Cのヒープが破損していて、理由がわかりません

分類Dev

Next.jsを使用してJavascriptヒープにより多くのメモリを割り当てる方法

分類Dev

事前定義されたヒープタイプのIONのメモリを割り当てる方法は?

分類Dev

ヒープが破損しています。C#dllimport、delphiPCharの戻り値

分類Dev

2つのLPTSTRでの作業中のヒープの破損

分類Dev

cとc ++の動的メモリ割り当てとヒープの違いは何ですか

分類Dev

スキップリストのヒープの破損

分類Dev

CreateWindowExWの使用中のヒープの破損

Related 関連記事

  1. 1

    割り当て時のメモリ破損

  2. 2

    割り当て時のメモリ破損

  3. 3

    ヒープメモリの割り当て

  4. 4

    CPythonメモリヒープ破損の問題

  5. 5

    グローバル演算子のnew / deleteを置き換え、これらの中にメモリを割り当てて、ヒープの破損を引き起こします

  6. 6

    スタックとヒープのJavaメモリ割り当て

  7. 7

    Javaヒープとスタックメモリの割り当て

  8. 8

    C ++ dllヒープメモリ割り当ての問題

  9. 9

    リリースモードでのOpenCVヒープの破損

  10. 10

    トップサイズが破損したメモリメモリ割り当てエラーが発生する

  11. 11

    JVMのメモリ割り当てとJavaのメモリ不足について:ヒープスペース

  12. 12

    C ++のメモリ割り当て領域(スタックvsヒープvs静的)

  13. 13

    ヒープに少しのメモリを割り当てますか?

  14. 14

    スタックとヒープへのメモリ割り当て量(c)

  15. 15

    空のSwift文字列メモリ割り当てレイアウト(スタック/ヒープ割り当て)

  16. 16

    メモリへのアクセスにおけるヒープの破損を理解する

  17. 17

    std :: vector要素への割り当ては、メモリ破損につながります

  18. 18

    SSEメモリコピーの実行によるヒープの破損-CRTチェックで何も見つかりません

  19. 19

    ヒープメモリの割り当てがスタックメモリの割り当てよりもはるかに速いのはなぜですか?

  20. 20

    カーネルモードのヒープの破損

  21. 21

    Arcのジェネリック型のヒープ割り当てメモリをラップしますか?

  22. 22

    Cのヒープが破損していて、理由がわかりません

  23. 23

    Next.jsを使用してJavascriptヒープにより多くのメモリを割り当てる方法

  24. 24

    事前定義されたヒープタイプのIONのメモリを割り当てる方法は?

  25. 25

    ヒープが破損しています。C#dllimport、delphiPCharの戻り値

  26. 26

    2つのLPTSTRでの作業中のヒープの破損

  27. 27

    cとc ++の動的メモリ割り当てとヒープの違いは何ですか

  28. 28

    スキップリストのヒープの破損

  29. 29

    CreateWindowExWの使用中のヒープの破損

ホットタグ

アーカイブ