Подтвердить что ты не робот

Попробуйте проверить, не освободить ли я память или нет.

Я передаю указатель на массив char для моего метода, а также значение для фактической высоты массива char. Я прокручиваю, чтобы увидеть, все ли значения равны 0, если они затем возвращают 0, else возвращает 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;     
}
4b9b3361

Ответ 1

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

if(*charPointer != '0'){

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

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

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

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

... или...

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

Ответ 2

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

Ответ 3

  • Вы не возвращаете 1, если не все значения равны 0
  • Вместо установки isIn и выхода из цикла вы можете просто вернуть 1 из условия