エラー():無効なポインタ私の単純なコードがC++で動作しないのはなぜですか?関数のreallocで
-2
A
答えて
3
int indZero = 0;
int *perZero=NULL;
int zero = 0;//Initialization
ProcessBit(zero,&indZero,&perZero);// Call function
void ProcessBit(int num,int *ind,int **mas)
{
mas=(int**)realloc(&mas,((*ind))*sizeof(int));// Error
mas[num-1]++;//it's correct line
}
いくつかの問題:
の最初の引数は、元ポインタ(又は
NULL
)です。ProcessBit
は実際には参照渡しを正しくエミュレートしません。負のインデックスを使用できます。
mas
はint
へのポインタですが、int
へのポインタとして使用します。
realloc
A "固定" バージョンは次のようなものになります、今
void ProcessBit(int num, int *ind, int **mas)
{
int *temp = realloc(*mas, (*ind + 1) * sizeof(int));
if (temp == NULL)
{
// TODO: Handle error
// TODO: return or exit(EXIT_FAILURE)
}
*mas = temp;
(*mas)[*ind] = 0; // Initial initialization
if (num > 0)
{
(*mas)[num - 1]++;
}
++*ind; // Increase the size
}
を、これは本当にC++(あなたがあなたの質問にタグ付けされる)だった場合、あなたはstd::vector
を使用する必要があります代わりに、はるかに単純なコードでほとんどすべての問題を解決します。
0
パラメータが間違っています。 NULLポインタを再割り当てしようとしているので、mallocのように動作するはずです。しかし、cstdlibで宣言されたヘッダが
void* realloc(void* ptr, std::size_t new_size);
仮パラメータmas
はすでに、ポインタのアドレスですので、コールはreallocのハンドル以来
*mas=(int*)realloc(*mas,((*ind))*sizeof(int));
(*mas)[num-1]++;
ことやコピーによってポインタを返す必要があります、参照ではありません。
メモリロケーション(NULL)のアドレスが格納されているメモリロケーションのアドレスをProcessBit
ファンクションに、次にそのロケーションのアドレスをrealloc
ファンクションに渡しています。この関数は、変数mac
が格納されているメモリをスタックに再割り当てしようとします。それが無効なポインタであることは間違いありません。
&mac
を渡すことで、ポインタの逆参照中に間違った方向にステップを実行しているだけです。
関連する問題
- 1. 私のサイトのHTMLコードで動作しない単純なスクリプト
- 2. マルチスレッドでは単純なマルチタスクが動作しないのはなぜですか?
- 3. 単純な301リダイレクトが動作しない変数で、なぜですか?
- 4. この単純なコードがPrologで正しく動作しないのはなぜですか?
- 5. なぜこの単純なjQueryブロックが動作しないのですか?
- 6. 私のC++コードが動作しないのはなぜですか?
- 7. このコードが動作しないのはなぜですか(js関数)?
- 8. PHPで動作しない単純な日付関数
- 9. C:fgets関数が動作しないのはなぜですか?
- 10. C++ .ignore()関数が正しく動作しないのはなぜですか?
- 11. 私の単純なエコーコマンドが機能しないのはなぜですか?
- 12. 私の.hide()関数が動作しないのはなぜですか?
- 13. なぜこの単純なコードが機能しないのですか
- 14. 単純なforループがC言語で動作しない
- 15. 私のコードでexecSyncが動作しないのはなぜですか?
- 16. 私のコードでmoveByとmoveToが動作しないのはなぜですか?
- 17. 私のコードでnotifyDataSetChanged()が動作しないのはなぜですか?
- 18. 私のコードでstrptimeが動作しないのはなぜですか?
- 19. 私のコードでcount ++が動作しないのはなぜですか?
- 20. 私のコードで.append()が動作しないのはなぜですか?
- 21. QLineEdit()。text()が私のコードで動作しないのはなぜですか?
- 22. JavascriptがFFで動作しますが、ないIEやChrome(単純な関数)
- 23. (単純なC++)私は次のコードでのファイル作成していたファイル
- 24. Cでfree()が動作しないのはなぜですか?
- 25. Postgresのこの単純なテーブルでSERIALが動作しないのはなぜですか?
- 26. 私のエイリアスが "sh -c"で動作しないのはなぜですか?
- 27. 私のコードはcodepenで動作しますが、エディタで動作しないのはなぜですか?
- 28. パーズクラウドコード:単純な関数が動作しない
- 29. 単純なjQuery関数が動作しない
- 30. 非常に単純な比較関数が動作しない
また、このコードはC++ではなく、C言語で書かれています。 –