测试以确定是否应该释放内存。

10
我将一个指向 char 数组的指针以及 char 数组的实际高度值传递给我的方法。我正在循环遍历以查看所有值是否都为 0,如果是,则返回 0,否则返回 1。
该方法用作测试,以查看是否应释放内存并在 char 数组全为 0 时将指针设置为 null。我遇到的问题是程序应该最终具有“一些未释放”的内存,所以我不知道它是否正确运行 - 并且我非常难以使用 gdb。
谢谢阅读。
int shouldBeNull(char *charPointer, int sizeOfCharArray)
{
    int isIn = 0;
    int i = 0;

    while(i < sizeOfCharArray){
        if(*charPointer != '0'){
            isIn = 1;
            break;
        }
        i++;
        charPointer++;
    }   
    return isIn;     
}

1
为什么你在循环结束时要增加isIn的值??? - Paul R
你需要增加*charPointer的值,以便指针可以遍历数组中的所有元素。同时要注意@Paul R的建议。 - Bob Kaufman
抱歉,伙计们,我没有从我的代码中复制粘贴,只是打字而已,这会教训我:D - sbsp
找一份GDB备忘单,并熟悉一些基本命令。对于仅测试这个函数来说,可能有点过头了,但以后会很有用。 - nevets1219
4
+1 认真要求不要发布答案解决方案。 - Raj More
2
+1:同 Raj More 所说。 - Scott Smith
3个回答

5
当你说“...所有值都是零...”时,我假设你指的是二进制数值为零,而不是字符'0'。
if(*charPointer != '0'){

这是零数字符号 (ASCII 0x31),而不是 NUL 字符 (ASCII 0x00)。如果你想检查零字节,请尝试以下操作:

if (*charPointer != '\0') {

此外,您没有对字符指针charPointer进行递增或偏移,因此您始终在测试第一个字符。
if (*charPointer++ != '\0) {

...or...

if (*(charPointer + i) != '\0) {

1
或者只需写成 if (*charPointer)if (*charPointer != 0) - Gabe
那么,如果我正在检查字符0,那么我的方法是正确的吗?另外,我是在结尾处增加指针吗? - sbsp
@sbsp:是的,你的代码正确地检查了零数字字符,但可能没有考虑到以空字符(0x00)结尾的字符串——假设你的缓冲区指向以空字符结尾的字符串。 - Scott Smith

4
你没有增加charPointer。

@sbsp:你的原始版本没有显示出来。编辑后的版本现在正确地显示了它。 - Scott Smith

1
  • 如果不是所有的值都为0,你没有返回1
  • 不要设置isIn并且退出循环,你可以直接从条件中返回1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接