デバッグエラー:ヒープの破損が検出されました

thafritz

私はCで少し遊んでいて、Cプログラミングの一種のoopのテストプログラムを書こうとしています。Visual Studio 2010で見出しのエラーが発生します。gccを使用しても、このエラーは発生しません。

誰かが私が間違っていることを指摘できますか?おっと、他のトピック外の提案に間違った言語を使用する以外に。

string_disposeの一番上のオブジェクトを解放するとエラーが発生するようですが、それがエラーの場所について多くを語っているのかどうかはわかりません。

また、コードの改善に関する提案も歓迎します。ポインタ演算を試したいので、配列構文を使用することはオプションではありません。

ヘッダーファイル "strings.h":

#ifndef STRINGS_H
#define STRINGS_H

struct strings
{
    char* s;
    int len;
};

typedef struct strings string;

void string_init(string* s, char* chars, int len);

string* string_new(char* chars, int len);

void string_dispose(string* s);

#endif

ソースファイル「strings.c」:

#include "strings.h"
#include <stdlib.h>


void string_init(string* self, char* chars, int len)
{
    int i;

    self->s = (char*)malloc((len + 1) * sizeof(char*));
    for (i = 0; i < len; i++)
    {
        *(self->s + i) = *(chars + i);
    }
    *(self->s + len) = '\0';
    self->len = len;
}


string* string_new(char* chars, int len)
{
    string* self;
    self = (string*)malloc(sizeof(string*));
    string_init(self, chars, len);
    return self;
}


void string_dispose(string* self)
{
    free(self->s);
    free(self);
}

メインファイル:

#include <stdlib.h>
#include <stdio.h>
#include "strings.h"


int main(int argc, char* argv)
{
    string* s;
    int n = 5;
    char* x = (char*)malloc((n + 1) * sizeof(char*));
    x[0] = 'f';
    x[1] = 'u';
    x[2] = 'b';
    x[3] = 'a';
    x[4] = 'r';
    x[5] = '\0';
    s = string_new(x, n);   
    printf("the string: %s\n", s->s);
    printf("the length: %d\n", s->len);
    string_dispose(s);
    printf("This is way more important");
    return 0;
}
sth

にメモリを割り当てようとするstringと、ポインタ(string*)に十分なメモリのみが割り当てられます

self = (string*)malloc(sizeof(string*));

sizeof(string)構造体へのポインタだけでなく、構造体全体を格納するのに十分なスペースが必要なため、代わりに割り当てる必要があります。はよりsizeof(string*)も小さいためsizeof(string)、他のコードは割り当てられた領域の外に書き込み、ヒープの破損を引き起こします。

同様に、文字のメモリをマロケートする場合、サイズは(len + 1) * sizeof(char)。である必要があります

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

ヒープの破損が検出されましたか?

分類Dev

ヒープの破損が検出されました| C

分類Dev

エラーc ++アサーションの失敗ヒープの破損が検出されました

分類Dev

ヒープの破損により、C ++でエラーが検出されました

分類Dev

デストラクタでヒープの破損が検出されました

分類Dev

ヒープ破損が検出されましたMalloc()Free()

分類Dev

ヒープ破損が検出されました-iPhone5Sのみ

分類Dev

iOSエラー:ヒープの破損が検出され、空きリストが破損し、ガード値が正しくありません:0

分類Dev

C ++:通常のブロック後にヒープの破損が検出されました

分類Dev

C ++:通常のブロック後にヒープの破損が検出されました

分類Dev

通常のブロック後にヒープの破損が検出されました(#181)

分類Dev

ヒープの破損が検出されました:通常のブロック後(#176)

分類Dev

通常のブロック #63 の後にヒープ破損が検出されました

分類Dev

クラス内のいくつかの配列でdelete []を呼び出しているときに「ヒープ破損が検出されました」-C ++

分類Dev

検出されたヒープ破損:通常のブロック後()

分類Dev

文字列を削除した後、C ++でヒープ破損が検出されました

分類Dev

C-アレイを解放するときにヒープ破損が検出されました

分類Dev

c ++プログラムの実行時にヒープが破損しましたエラー

分類Dev

ヒープ破損エラーをデバッグする方法は?

分類Dev

ヒープの破損-デバッグアサーションが失敗しました。dbgheap.cの1322行の式_crtIsValidHeapPointer(pUserData)

分類Dev

エラー:rpmdb:破損したヘッダー#1439が取得されました-スキップします

分類Dev

ヒープからの割り当て中に重大なエラーが検出されました

分類Dev

中断されたラップトップのバッテリーがなくなると、データが破損するリスクがありますか?

分類Dev

Babel:プラグイン/プリセットエラーの重複が検出されました

分類Dev

スタックの破損が検出され、dalvikVMがクラッシュしました

分類Dev

デバッグエラー-Abort()が呼び出されました

分類Dev

shared_ptrが破棄されたときのヒープの破損

分類Dev

dpkg-deb:エラー:貼り付けサブプロセスがシグナルによって強制終了されました(パイプの破損)

分類Dev

ヒストグラムのビンのエッジが2つのオーバーレイされたプロットと整列しません

Related 関連記事

  1. 1

    ヒープの破損が検出されましたか?

  2. 2

    ヒープの破損が検出されました| C

  3. 3

    エラーc ++アサーションの失敗ヒープの破損が検出されました

  4. 4

    ヒープの破損により、C ++でエラーが検出されました

  5. 5

    デストラクタでヒープの破損が検出されました

  6. 6

    ヒープ破損が検出されましたMalloc()Free()

  7. 7

    ヒープ破損が検出されました-iPhone5Sのみ

  8. 8

    iOSエラー:ヒープの破損が検出され、空きリストが破損し、ガード値が正しくありません:0

  9. 9

    C ++:通常のブロック後にヒープの破損が検出されました

  10. 10

    C ++:通常のブロック後にヒープの破損が検出されました

  11. 11

    通常のブロック後にヒープの破損が検出されました(#181)

  12. 12

    ヒープの破損が検出されました:通常のブロック後(#176)

  13. 13

    通常のブロック #63 の後にヒープ破損が検出されました

  14. 14

    クラス内のいくつかの配列でdelete []を呼び出しているときに「ヒープ破損が検出されました」-C ++

  15. 15

    検出されたヒープ破損:通常のブロック後()

  16. 16

    文字列を削除した後、C ++でヒープ破損が検出されました

  17. 17

    C-アレイを解放するときにヒープ破損が検出されました

  18. 18

    c ++プログラムの実行時にヒープが破損しましたエラー

  19. 19

    ヒープ破損エラーをデバッグする方法は?

  20. 20

    ヒープの破損-デバッグアサーションが失敗しました。dbgheap.cの1322行の式_crtIsValidHeapPointer(pUserData)

  21. 21

    エラー:rpmdb:破損したヘッダー#1439が取得されました-スキップします

  22. 22

    ヒープからの割り当て中に重大なエラーが検出されました

  23. 23

    中断されたラップトップのバッテリーがなくなると、データが破損するリスクがありますか?

  24. 24

    Babel:プラグイン/プリセットエラーの重複が検出されました

  25. 25

    スタックの破損が検出され、dalvikVMがクラッシュしました

  26. 26

    デバッグエラー-Abort()が呼び出されました

  27. 27

    shared_ptrが破棄されたときのヒープの破損

  28. 28

    dpkg-deb:エラー:貼り付けサブプロセスがシグナルによって強制終了されました(パイプの破損)

  29. 29

    ヒストグラムのビンのエッジが2つのオーバーレイされたプロットと整列しません

ホットタグ

アーカイブ