【问题标题】:Malloc not creating memoryMalloc 不创建内存
【发布时间】:2014-03-04 12:20:48
【问题描述】:

我有一个看起来很简单的问题,感觉它会有一个非常直截了当的答案。我以前曾多次以这种方式使用过 malloc ,但由于某种原因,它没有分配足够的内存来包含文件中的数据 - 尽管是 C 的新手,但我觉得我好像忽略了一些东西非常明显,这让我很沮丧。任何帮助将不胜感激。

文件

--------- 用户 ---------

ID:0

姓名:克里斯

性别:男

年龄:21

代码

const int BUFFER = 64;
char **fileContent;
int i;

// Code that opens file - tested

fileContent = (char**)malloc(BUFFER * sizeof(char*));

for(i = 0; i < BUFFER; i++)
{
    fileContent[i] = (char*)malloc(BUFFER * sizeof(char));
    fgets(fileContent[i], BUFFER, fp);
}

我知道上面的一些做法很糟糕,但这是我为了测试目的而隔离的部分。我遇到的问题是只有文件的第一行被读入 fileContent 数组。 VS 调试器看起来像这样...

文件内容 0xblah {0xblah "--------- 用户 ---------\n"}

                           0xblah "--------- USERS ---------\n"

                           45 '-'

fileContent 下方的两个名称(我假设 fileContent[i])不存在。有任何想法吗?提前感谢您的帮助。

【问题讨论】:

  • 您确定这是代码问题,而不是不知道如何使用调试器?如果在监视窗口中输入fileContent, 64 会发生什么? - 另外,Malloc 不创建内存应该很容易通过检查返回的指针是否不为 0 来确定。
  • @Alluziion:一个可编译/可执行的例子会很好。我也不太明白你为什么使用malloc() 代替fileContent 而不是声明char * fileContent[ BUFFER ]。我的凝视调试现在是空的......
  • 您确定您的输入文件在可见内容后面没有任何尾随空格吗?超过 64 字节的行将导致意外行为,因为 fread() 不会读取整行。
  • malloc 不创建内存...它分配内存:-D

标签: c memory dynamic malloc allocation


【解决方案1】:

您的代码似乎正确。检查malloc的返回值。 例如

fileContent[i] = (char*)malloc( BUFFER * sizeof(char) );
if ( fileContent[i] == NULL )
{
    printf( "Error in memory allocation." );
    exit( -1 );
}

【讨论】:

    【解决方案2】:

    调试器只是不知道何时停止读取数组中的每个条目。它不知道它应该从 fileContent[0] 读取 64 个字节,然后从 fileContent[1] 再读取 64 个字节——这怎么可能?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-13
      • 2014-01-22
      • 2010-12-09
      • 2012-12-26
      相关资源
      最近更新 更多