0

我正在尝试一个 C 编程任务,我需要遍历文档每一行的每个索引,并在相应数组 ar 中的每个字符索引处设置一个整数值:

//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 开始返回一个空指针,导致 memcpy(显然)无法工作。

发生这种情况有什么原因吗?我没有办法耗尽内存,因为我只分配了这些小数组 9 次。

4

2 回答 2

7

malloc失败时将返回空指针。发生这种情况的一些明显原因:

  • 您已用尽堆内存。line_size如果非常大,这是合理的。
  • 你已经破坏了堆。如果您正在运行的代码中存在错误,但出于询问此问题的目的已将其删除,则可能会发生这种情况。

检查 的值errno以了解有关失败的更多信息。

于 2013-04-24T08:01:07.010 回答
0

也许您的堆栈太少,请尝试在 IDE 中在编译/链接时修改默认堆栈。如果您使用的是 GCC,请在使用 GNU 编译器编译期间查看此 Change stack size for a C++ application in Linux

于 2013-04-24T13:52:10.287 回答