【发布时间】:2016-02-28 21:37:49
【问题描述】:
我认为这个应该很快。
编辑:这是针对我的 CS113 课程的。我只需要释放所有内存。如果 Valgrind 发现任何内存泄漏,我会丢分。 :P
无论如何,我发现它显然只需要我在 Main 中释放与 zero_pad 的返回值相关的东西。一旦我这样做了,它工作得很好。如果我知道怎么做,我会将此帖子标记为“完成”。
char *zero_pad(struct cpu_t *cpu, char *string)
{
char *zero_string = malloc(cpu->word_size + 1);
int num_zeros = ((cpu->word_size) - strlen(string));
int i;
for(i = 0; i < num_zeros; i++)
{
zero_string[i] = '0';
}
return strncat(zero_string, string, strlen(string));
}
我需要释放 zero_string,因为我分配了它。但是,我不知道如何。 如果我在返回之前释放它,那么我已经丢失了该数据并且无法返回它。如果我之后尝试释放它,该函数已经返回,因此无法继续释放它。
我尝试使用 strcpy 将 zero_string 中的字符串复制到一个新字符串中,但我一定做错了,因为我刚刚弄得一团糟。
那么,大家觉得呢?
【问题讨论】:
-
API 文档中提到调用者负责
free返回值的情况并不少见。 -
我不知道这意味着什么。这里很新,这是我 CS113 的第一个学期。到目前为止,我很喜欢它!
-
int num_zeros = ((cpu->word_size) - strlen(string));包含有符号-无符号错误 -
调用 zeropad 的人必须在完成后释放返回的缓冲区。
-
strncat在这里使用不正确:第一个参数必须是一个以 null 结尾的字符串。最好是strcpy(zero_string + i, string); return zero_string;