特定の値を持つreallocの奇妙な動作

キロル

初期次元5のint配列をN個の値で再割り当てし、それらに前の値の合計を入力する必要があります。N <= 6の場合はすべて正常に機能しますが、N == 7を指定すると、プログラムが次のエラーでクラッシュします。

a.out:malloc.c:2403:sysmalloc:アサーション `(old_top == initial_top(av)&& old_size == 0)|| ((unsigned long)(old_size)> = MINSIZE && prev_inuse(old_top)&&((unsigned long)old_end&(pagesize-1))== 0) 'が失敗しました。

私は特別なことや奇妙なことは何もしません、そしてなぜ私がこの行動をするのか分かりません。これは私のコードです:

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


int * change(int * arr, int n)
{
  int * a, i, somma = 0;

  a = realloc(arr, n * sizeof(int));

  for(i = 0; i < 5; i++)
    somma += arr[i];

  for(int j = i; j < (5+n); j++) {
    a[j] = somma;
    somma += a[j];
  }

  return a;
}

int main()
{
  int N, i, *arr, *arr1;

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

  printf("give me 5 numbers\n");
  for(i = 0; i < 5; i++)
    scanf("%d", &arr[i]);

  printf("give me N number to use in realloc\n");
  scanf("%d", &N);

  arr1 = change(arr, N);

  for(i = 0; i < (5+N); i++) {
    printf("%d\n", arr1[i]);
  }

  return 0;
}

問題を回避するために、別のポインターに再割り当てします。ヘルプは非常に便利です。ありがとう

んん

ここに問題があります:

a = realloc(arr, n * sizeof(int));

for(i = 0; i < 5; i++)
  somma += arr[i];

このrealloc関数は、渡された引数を無効にしますarrarr書くことによって行うように、それは未定義の振る舞いを後で使用する原因になりますarr[i]

これを修正するには、合計をrealloc行の前に移動します


もう1つの問題は、次のループが範囲外に書き込むことです。

for(int j = i; j < (5+n); j++) {
    a[j] = somma;

nエントリにスペースを割り当てただけですが、ループアップし5+nます。(そしてmainあなたもループし5+Nます)。(5+n)代わりに、エントリを再割り当てする必要があるかもしれません

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

数値文字列を持つString.replaceAll()の奇妙な動作

分類Dev

膨大な配列を持つCodePenでの奇妙なJavaScriptの動作

分類Dev

C ++ malloc / reallocの奇妙な動作

分類Dev

OneToMany関係を持つHibernateからの奇妙な動作

分類Dev

フロート入力値と出力値を持つ単純なCコードの奇妙な動作

分類Dev

範囲外の値を持つ列挙型を解析するときの奇妙な動作

分類Dev

$ _の奇妙な値/動作

分類Dev

null許容フィールドを持つEqualityComparerの奇妙な動作

分類Dev

特定の推移的なノード ラベルを持つパスをフィルターで除外するときの奇妙な暗号の動作

分類Dev

2つの数値の間の値の範囲を見つけるときの奇妙な動作

分類Dev

セッターのないプロパティを持つEntityFrameworkCoreの奇妙な動作

分類Dev

特定のCSSを使用したHTMLリストの奇妙な動作

分類Dev

Javaのボックス化された型を持つ3項条件付きの奇妙な動作

分類Dev

値を変更している間のphpの奇妙な動作

分類Dev

cdkCdkDragDropを使用した2つの配列の奇妙な動作

分類Dev

STM32F4、IRQハンドラーと共有変数を持つ関数間の奇妙な動作

分類Dev

静的最終的な修飾子を持つ奇妙なJavaの行動

分類Dev

引数を値で渡すときの奇妙な動作

分類Dev

Reallocでの奇妙な動作:次のサイズが無効です

分類Dev

ファイルの値を配列に格納すると、奇妙な動作につながります

分類Dev

QDataStreamの動作を伴う奇妙なQByteArray

分類Dev

異なるタイプの未定義の動作を持つdelete []?

分類Dev

奇妙なconky背景の動作

分類Dev

Java TreeSetの奇妙な動作

分類Dev

Map、parseIntの奇妙な動作

分類Dev

Java OutOfMemoryErrorの奇妙な動作

分類Dev

GregorianCalendarでの奇妙な動作

分類Dev

NumberFormat Javaの奇妙な動作

分類Dev

getuid / geteuidの奇妙な動作

Related 関連記事

  1. 1

    数値文字列を持つString.replaceAll()の奇妙な動作

  2. 2

    膨大な配列を持つCodePenでの奇妙なJavaScriptの動作

  3. 3

    C ++ malloc / reallocの奇妙な動作

  4. 4

    OneToMany関係を持つHibernateからの奇妙な動作

  5. 5

    フロート入力値と出力値を持つ単純なCコードの奇妙な動作

  6. 6

    範囲外の値を持つ列挙型を解析するときの奇妙な動作

  7. 7

    $ _の奇妙な値/動作

  8. 8

    null許容フィールドを持つEqualityComparerの奇妙な動作

  9. 9

    特定の推移的なノード ラベルを持つパスをフィルターで除外するときの奇妙な暗号の動作

  10. 10

    2つの数値の間の値の範囲を見つけるときの奇妙な動作

  11. 11

    セッターのないプロパティを持つEntityFrameworkCoreの奇妙な動作

  12. 12

    特定のCSSを使用したHTMLリストの奇妙な動作

  13. 13

    Javaのボックス化された型を持つ3項条件付きの奇妙な動作

  14. 14

    値を変更している間のphpの奇妙な動作

  15. 15

    cdkCdkDragDropを使用した2つの配列の奇妙な動作

  16. 16

    STM32F4、IRQハンドラーと共有変数を持つ関数間の奇妙な動作

  17. 17

    静的最終的な修飾子を持つ奇妙なJavaの行動

  18. 18

    引数を値で渡すときの奇妙な動作

  19. 19

    Reallocでの奇妙な動作:次のサイズが無効です

  20. 20

    ファイルの値を配列に格納すると、奇妙な動作につながります

  21. 21

    QDataStreamの動作を伴う奇妙なQByteArray

  22. 22

    異なるタイプの未定義の動作を持つdelete []?

  23. 23

    奇妙なconky背景の動作

  24. 24

    Java TreeSetの奇妙な動作

  25. 25

    Map、parseIntの奇妙な動作

  26. 26

    Java OutOfMemoryErrorの奇妙な動作

  27. 27

    GregorianCalendarでの奇妙な動作

  28. 28

    NumberFormat Javaの奇妙な動作

  29. 29

    getuid / geteuidの奇妙な動作

ホットタグ

アーカイブ