【发布时间】: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