Попробуйте проверить, не освободить ли я память или нет.
Я передаю указатель на массив 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;
}
Ответы
Ответ 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 из условия