【发布时间】:2012-10-23 20:07:47
【问题描述】:
我之前在Code Review 中已经实施了一些建议。我还通过使用指针改进了我的代码。但是,squeezed_str++ 下面的地址递增部分有什么问题?似乎地址没有增加。请指教。
PS。 substring() 函数正在工作。 :)
char *squeeze (char *str, int start_index, int end_index, char *ref_str) {
char *substr;
substr = malloc (sizeof (*substr));
if (substr == NULL) {
printf ("Unable to allocate memory.\n");
exit (EXIT_FAILURE);
}
char *squeezed_str;
squeezed_str = malloc (sizeof (*squeezed_str));
if (squeezed_str == NULL) {
printf ("Unable to allocate memory!\n");
exit (EXIT_FAILURE);
}
substr = substring (str, start_index, end_index);
int substr_len = strlen (substr);
int refstr_len = strlen (ref_str);
char chr1, chr2; chr1 = chr2 = '\0';
for (int i = 0; i < substr_len; i++) {
chr1 = *(substr+i);
for (int j = 0; j < refstr_len; j++) {
chr2 = *(ref_str + j);
if (chr1 == chr2) {
break;
}
}
if (chr1 != chr2) {
*squeezed_str = *(substr+i);
squeezed_str++;
}
}
return squeezed_str;
} /* end of squeeze() */
【问题讨论】:
-
这两个malloc真的很奇怪。
sizeof(*subtr) == sizeof(char). -
sizeof(char*) 通常给出 4 或 8 个字节; strlen(char*) 给出字符串的长度
-
另外,
substr = malloc();然后没有转换substr = substring()... 你泄漏了一个字节的内存。 -
...在 1 字节 malloc 之后,我们立即通过将 ptr 设置为其他东西来泄漏它...
-
@chrismsawi ,您阅读的建议是 int *ptr = malloc( sizeof(*ptr) );这为一个整数分配空间,您想为 char * 的内容分配空间,然后 malloc(strlen(str)+1) 就可以了
标签: c optimization pointers