Проверьте, следует ли мне освободить память или нет - PullRequest
10 голосов
/ 24 марта 2010

Я передаю указатель на массив символов в мой метод, а также значение для фактической высоты массива символов. Я перебираю, чтобы увидеть, все ли значения равны 0, если они потом возвращают 0, иначе возвращают 1.

Метод используется в качестве теста, чтобы увидеть, следует ли мне освобождать память или нет, и установить указатель на ноль, если он полон 0. У меня проблема в том, что в конце программа должна иметь «некоторую несвободную» память, так что я понятия не имею, правильно ли она делает это - или 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;     
}

Ответы [ 3 ]

5 голосов
/ 24 марта 2010

Когда вы говорите «... все значения равны нулю ...», я предполагал, что вы имели в виду двоичные значения нуля, а не символа «0» ...

if(*charPointer != '0'){

Это нулевой символ (0x31), а не нулевой символ (0x00). Если вы пытались проверить нулевые байты, попробуйте следующее:

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

Кроме того, вы не увеличиваете и не смещаете указатель вашего персонажа charPointer, поэтому вы всегда тестируете первый символ.

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

... или ...

if (*(charPointer + i) != '\0) {
4 голосов
/ 24 марта 2010

Вы не увеличиваете charPointer

1 голос
/ 24 марта 2010
  • Вы не вернете 1, если не все значения 0
  • Вместо установки isIn и выхода из цикла вы можете просто вернуть 1 из условия
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...