Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 测试看看我是否应该释放内存_C_Pointers - Fatal编程技术网

C 测试看看我是否应该释放内存

C 测试看看我是否应该释放内存,c,pointers,C,Pointers,我将一个指向char数组的指针传递给我的方法,以及char数组的实际高度值。我循环查看是否所有值都是0,如果是,则返回0,否则返回1 该方法被用作测试,以查看是否应该释放内存,如果满0,则将指针设置为null。我遇到的问题是,程序在最后应该有“一些不自由”的内存,所以我不知道它是否正确地执行了它——而gdb我非常挣扎 谢谢你的阅读 int shouldBeNull(char *charPointer, int sizeOfCharArray) { int isIn = 0; in

我将一个指向char数组的指针传递给我的方法,以及char数组的实际高度值。我循环查看是否所有值都是0,如果是,则返回0,否则返回1

该方法被用作测试,以查看是否应该释放内存,如果满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;     
}
int-shouldBeNull(char*charPointer,int-sizeofcharray)
{
int-isIn=0;
int i=0;
而(i
当您说“…所有值都是零…”时,您不是在增加字符指针,我假设您指的是零的二进制值,而不是字符“0”

if(*charPointer != '0'){
这是零位字符(ASCII 0x31),而不是NUL字符(ASCII 0x00)。如果尝试检查零字节,请尝试以下操作:

if (*charPointer != '\0') {
此外,您没有递增或偏移字符指针
charPointer
,因此您总是测试第一个字符

if (*charPointer++ != '\0) {
……或者

if (*(charPointer + i) != '\0) {
  • 如果不是所有值都为0,则不会返回1
  • 您可以从条件中返回1,而不是设置
    isIn
    并中断循环

为什么要在循环结束时递增isIn???需要递增*charPointer,以便指针在数组中的所有元素之间迭代。也请注意@Paul R的建议。对不起,伙计们,我没有从我的代码中复制和粘贴,只是键入了,这将教会我:D+1,因为我明确要求不要发布解决方案+1:Raj More说了什么。或者只是
if(*charPointer)
或者
if(*charPointer!=0)
那么如果我正在检查charchter 0,那么我的方法是正确的?另外,我正在递增结尾处的指针?@sbsp:是的,您的代码正确地检查了零位字符,但可能的例外是它没有考虑终止的空字符(0x00)在字符串的末尾-假设缓冲区指向以null结尾的字符串…@sbsp:您的原始版本没有显示这一点。现在,编辑的版本正确地显示了这一点。