0

ドキュメントの各行の各インデックスを反復処理し、対応する配列 ar の各文字インデックスに整数値を設定する必要がある C プログラミング割り当てを試みています。

//Jagged array ar containing pointers to each row
int* ar[line_count];
//The size of each row is the line width * the size of an int ptr
const int line_size = max_width * sizeof(int*);

//For each line
for (i = 0; i < line_count; i++)
{
    //If the first runthrough, copy the blank array 
    if (i == 0)
    {
        ar[i] = malloc(line_size);
        memcpy(ar[i], blank_ar, line_size);
    }
    //Otherwise, copy from the last row
    else
    {
        ar[i] = malloc(line_size);
        //This is set to a null pointer after several runthroughs
        memcpy(ar[i], ar[i - 1], line_size);
    }
    //Edit the current row ar[i]
}

唯一の問題は、9 回の繰り返しの後、malloc が null ポインターを返し始め、memcpy が (明らかに) 機能しなくなることです。

これが起こっている理由はありますか?これらの小さな配列を9回しか割り当てないため、メモリが不足することはありません。

4

2 に答える 2

7

malloc失敗するとヌルポインタを返します。これが発生する可能性があるいくつかの明白な理由:

  • ヒープ メモリを使い果たしました。line_sizeが非常に大きい場合、それはもっともらしいです。
  • ヒープが破損しています。これは、実行しているコードにエラーがある場合に発生する可能性がありますが、この質問をする目的で削除されています。

の値errnoを調べて、失敗に関する詳細情報を見つけてください。

于 2013-04-24T08:01:07.010 に答える
0

スタックが少なすぎる可能性があります。IDE でコンパイル/リンク時にデフォルトのスタックを変更してみてください。GCC を使用している場合は、GNU コンパイラでのコンパイル中に Linux で C++ アプリケーションのスタック サイズを変更するを参照してください。

于 2013-04-24T13:52:10.287 に答える