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

マイケルフェル123

したがって、ユーザーから整数の行列を初期化し、さまざまな方法で配列をソートし、動的メモリを使用するこの単純なコードがあります。

#include <stdio.h>
#include <stdlib.h>
void initArrays();
void printArr(int** matrix, int rows);
void sortArr(int** matrix,int rows);
void printByOrder(int** matrix,int rows);
int main(void)
{
    initArrays();
    system("Pause");
    return 0;
}

void initArrays()
{
    int i = 0;
    int j = 0;
    int * arr = 0;
    int len = 0;
    int** matrix = 0;
    int rows = 0;

    printf("Enter number of rows: ");
    scanf("%d", &rows);
    matrix = (int**)malloc(rows * sizeof(int));

    for (i = 0; i < rows; i++)
    {
        printf("Enter array length for row %d: ", i);
        scanf("%d", &len);
        arr = (int*)malloc(len * sizeof(int));
        arr[0] = len;
        for (j = 0; j < len; j++)
        {
            printf("Enter value for array: ");
            scanf("%d",arr + j + 1);
        }   
        matrix[i] = arr;
    }
    printArr(matrix, rows);
    sortArr(matrix,rows);
    printByOrder(matrix, rows);
    free(matrix);
    free(arr);

}

void printArr(int** matrix, int rows)
{
    int i = 0;
    int j = 0;
    printf("Printing:\n");
    for (i = 0; i < rows; i++)
    {
        for (j = 0; j <= matrix[i][0];j++)
        {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }





}
void sortArr(int ** matrix, int rows)
{
    int i = 0;
    int j = 0;
    int k = 0;
    int* arr = 0;
    int pos = 0;
    int swap = 0;

    for (i = 0; i < rows; i++) //getting a single arr to work with.
    {
        arr = matrix[i];

        for (j = 1; j < arr[0]; j++)
        {
            pos = j;

            for (k = j + 1; k <= arr[0]; k++) //selection sort.
            {
                if (arr[pos] > arr[k])
                {
                    pos = k;
                }

            }
            if (pos != j)
            {
                swap = arr[j];
                arr[j] = arr[pos];
                arr[pos] = swap;
            }
        }

    }
        matrix[i] = arr;

        printf("Sorted Rows: \n");
        for (i = 0; i < rows; i++)
        {
            for (j = 1; j < matrix[i][0] + 1; j++)
            {
                printf("%d ", matrix[i][j]);
            }
            printf("\n");
        }


}

void printByOrder(int** matrix, int rows)
{
    int i = 0;
    int j = 0;
    int smallest = 0;
    int pos = 0;
    int* swap = 0;
    for (j = 0; j < rows - 1; j++)
    {
        pos = j;

        for (i = j + 1; i < rows; i++) //selection sort.
        {
            if (matrix[pos][0] > matrix[i][0])
            {
                pos = i;
            }

        }
        if (pos != j)
        {
            swap = matrix[j];
            matrix[j] = matrix[pos];
            matrix[pos] = swap;
        }

    }
    printf("Ordered Array: \n");
    for(i = 0; i < rows; i++)
    {
        for (j = 1; j < matrix[i][0] + 1; j++)
        {
            printf("%d ", matrix[i][j]);
        }


        printf("\n");
    }
}

私の唯一の問題は、free関数が実行されると、プログラムが「通常のブロック #63 の後にヒープ破損が検出されました」というエラーでクラッシュするfreeことです。いろいろと検索してみましたが、なぜこのエラーが発生するのかわかりませんでした。誰かが私にそれを説明できますか?ありがとう!

私は言った

Valgrind ( http://valgrind.org/ を参照) は、次の問題を示しています。

scanf("%d",arr + j + 1);

ライン。

最初の位置の長さを割り当てサイズを維持したい場合:

arr = (int*)malloc(len * sizeof(int));

が小さすぎます (int長さ自体にもう 1 つ必要です)。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

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

分類Dev

Chrome 63は、worker-srcCSPヘッダーを無視または破損しているようです

分類Dev

Firefox 63:スクロールされたコンテンツの誤った表示

分類Dev

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

分類Dev

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

分類Dev

Chromeをバージョン63にアップグレードした後のSeleniumChromeDriverの例外

分類Dev

Gnome 16.04.01にアップグレードした後、リストファイルのエントリ63の形式が正しくありません

分類Dev

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

分類Dev

動的配列を削除した後のヒープの破損

分類Dev

strcatを2回使用した後のヒープ破損

分類Dev

Chrom(e / ium)63のローカルSSL証明書

分類Dev

glibcが検出されました-ダブルフリーまたは破損(!prev)

分類Dev

クロムブラウザ63が62よりもはるかに大きいのはなぜですか?

分類Dev

Firefoxプッシュ通知がFirefox63で機能しない

分類Dev

termuxにライブラリ「libicuuc.so.63」をロード中にエラーが発生しました

分類Dev

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

Related 関連記事

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

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

  7. 7

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

  8. 8

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

  9. 9

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

  10. 10

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

  11. 11

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

  12. 12

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

  13. 13

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

  14. 14

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

  15. 15

    Chrome 63は、worker-srcCSPヘッダーを無視または破損しているようです

  16. 16

    Firefox 63:スクロールされたコンテンツの誤った表示

  17. 17

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

  18. 18

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

  19. 19

    Chromeをバージョン63にアップグレードした後のSeleniumChromeDriverの例外

  20. 20

    Gnome 16.04.01にアップグレードした後、リストファイルのエントリ63の形式が正しくありません

  21. 21

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

  22. 22

    動的配列を削除した後のヒープの破損

  23. 23

    strcatを2回使用した後のヒープ破損

  24. 24

    Chrom(e / ium)63のローカルSSL証明書

  25. 25

    glibcが検出されました-ダブルフリーまたは破損(!prev)

  26. 26

    クロムブラウザ63が62よりもはるかに大きいのはなぜですか?

  27. 27

    Firefoxプッシュ通知がFirefox63で機能しない

  28. 28

    termuxにライブラリ「libicuuc.so.63」をロード中にエラーが発生しました

  29. 29

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

ホットタグ

アーカイブ