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

マックス・プラッケン

コンソールからプログラムを呼び出すときに、Cで小さなプログラムを作成して.cppファイルと.hファイルを作成します。動作していますが、プログラムを使用すると、Enterキーを押してファイルを作成した後、ポップアップエラーが表示されます:HEAP CORRUPTIONDETECTED。

誰かがこれで私を助けることができますか?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Windows.h>
#include <direct.h>

#pragma warning(disable : 4996)

int main(int argc, char*argv[]) {
    if (argc < 2 ) {
        printf("Not enough arguments given: usage [name]");
        return;
    }

    char* name=(char*)malloc(strlen(argv[1]));
    name = argv[1];
    char* name2 = (char*)malloc(strlen(name));
    strcpy(name2, name);

    strcat(name, ".cpp");
    strcat(name2, ".h");

    name[strlen(name) + 1] = '\0';
    name2[strlen(name2)+ 1] = '\0';

    FILE * fp = fopen(name, "w");
    FILE * fp2 = fopen(name2, "w");

    free(name);
    free(name2);

    return 0;
}

エラーポップアップ

ブルーノ

あなたは十分な長さを割り当てていません

char* name=(char*)malloc(strlen(argv[1]));
name = argv[1];
char* name2 = (char*)malloc(strlen(name));
strcpy(name2, name);

strcat(name, ".cpp");
strcat(name2, ".h");

ヌル終了文字を忘れずに「.cpp」と「.h」用のスペースが必要なため、解決策は次のようになります。

size_t alen = strlen(argv[1]);
char * h = malloc(alen + 3);
char * cpp = malloc(alen + 5);

strcpy(h, argv[1]);
strcpy(h + alen, ".h");
strcpy(cpp, argv[1]);
strcpy(cpp + alen, ".cpp");

そしてどこかで無料のhcpp

name[strlen(name) + 1] = '\0';
name2[strlen(name2)+ 1] = '\0';

strlenを使用できるように、nullの終了文字があると既に想定しています(もちろん、これらの行は上記の私の提案を使用して存在しません)

free(name);

あなたは自由でargv[1]あり、あなたはできません。(もちろん、上記の私の提案を使用すると、2つの最初の無料は存在しません)

if (argc < 2 ) {
    printf("Not enough arguments given: usage [name]");
    return;
}

何も返さず、intが期待されます

また、fopenの成功を確認する必要があります。また、mallocでも、通常、メモリをほとんど必要としないプログラムに十分なメモリがあります。


あなたのメインは:

int main(int argc, char*argv[]) {
    if (argc < 2 ) {
        printf("Not enough arguments given: usage %s [name]\n", *argv);
        return -1;
    }

    size_t alen = strlen(argv[1]);
    char * h = malloc(alen + 3);
    char * cpp = malloc(alen + 5);

    if ((h == NULL) || (cpp == NULL)) {
      puts("not enough memory");
      return -1;
    }

    strcpy(h, argv[1]);
    strcpy(h + alen, ".h");
    strcpy(cpp, argv[1]);
    strcpy(cpp + alen, ".cpp");

    FILE * fph = fopen(h, "w");

    if (fph == NULL) {
      printf("cannot open %s\n", h);
      return -1;
    }

    FILE * fpcpp = fopen(cpp, "w");

    if (fcpp == NULL) {
      printf("cannot open %s\n", cpp);
      return -1;
    }


    free(h);
    free(cpp);

    /* write in files */

    fclose(fh);
    fclose(fcpp);

    return 0;
}

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

c ++ delete [] 2D配列によりヒープが破損しました

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

C ++の多重継承とアップキャストされたスマートポインターの破壊により、VS2017でヒープが破損します

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

c ++の「ヒープが破損しています」エラーを修正する方法は?

分類Dev

C ++ウィンドウがブレークポイントをトリガーしました-ヒープの破損

分類Dev

ヒープ破損の問題-C

分類Dev

呼び出された中止-破損したサイズとcのprev_sizeエラー

分類Dev

配列 C の割り当て時にスタック破壊が検出されました

分類Dev

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

分類Dev

Cは、whileループ内の配列で検索番号を取得できず、「ダブルフリーまたは破損」エラーが発生します

分類Dev

C#アプリでマーシャリングされた構造体を受け取った直後のヒープの破損

Related 関連記事

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

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

  7. 7

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

  8. 8

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

  9. 9

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

  10. 10

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

  11. 11

    c ++ delete [] 2D配列によりヒープが破損しました

  12. 12

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

  13. 13

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

  14. 14

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

  15. 15

    C ++の多重継承とアップキャストされたスマートポインターの破壊により、VS2017でヒープが破損します

  16. 16

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

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

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

  21. 21

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

  22. 22

    c ++の「ヒープが破損しています」エラーを修正する方法は?

  23. 23

    C ++ウィンドウがブレークポイントをトリガーしました-ヒープの破損

  24. 24

    ヒープ破損の問題-C

  25. 25

    呼び出された中止-破損したサイズとcのprev_sizeエラー

  26. 26

    配列 C の割り当て時にスタック破壊が検出されました

  27. 27

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

  28. 28

    Cは、whileループ内の配列で検索番号を取得できず、「ダブルフリーまたは破損」エラーが発生します

  29. 29

    C#アプリでマーシャリングされた構造体を受け取った直後のヒープの破損

ホットタグ

アーカイブ