【发布时间】:2014-12-19 12:15:20
【问题描述】:
我需要画一行我想要的字符。所以我为此编写了一个函数:
void fDrawLine(int length)
{
int i;
char * compLine = (char *) malloc(WINDOW_WIDTH + 2);
for(i = 0; i < length; i++)
strcat(compLine, "-");
fDrawSpacedMessage(compLine, -1, TRUE);
}
WINDOW_WIDTH 定义为80,fDrawSpacedMessage 是另一个打印文本居中等功能。
它正在完美构建,没有错误,没有警告。但在运行时,一切正常,但如果fDrawLine 执行,程序崩溃并给出错误代码0xc0000005。我知道这是关于内存分配的,但我已经初始化了 compLine 字符串。
我已经尝试了几件事;我认为是另一个功能导致了它,所以我隔离了fDrawLine,但崩溃仍在继续。使用compLine[0] = 0;、compLine[WINDOW_WIDTH] = {0}; 更改初始化没有帮助。
它在我的另一台机器上运行良好,它运行 Ubuntu,使用最新的 gcc,但是在 Windows 上使用 Code::Blocks (MinGW) 时,它总是崩溃。
这段代码有什么问题?
【问题讨论】:
-
为什么不使用
memset填充'-'?还有length的价值是什么? -
由于这是一个学校项目,您大概是在学习编码。除了其他事情,看看你的函数然后回答这个问题:调用
fDrawLine(WINDOW_WIDTH*2);实际上会做什么?学习防御性编程 -
1) 需要确保
length不会太大。添加assert(length < (WINDOW_WIDTH + 1));2)2在这里是一个神奇的数字。提供有关 2 的详细信息? (fDrawSpacedMessage()会不会尝试显示 81 长的“---...---”?)
标签: c string pointers for-loop strcat