LINUX.ORG.RU

Сообщения itn

 

Документация на PocketBook SDK

Добрый день/ночь. Тут проблема нарисовалась... Захотел пописать хэлоуворлды, но документации по эпиай как-то не нашел. Есть ли что осмысленное по этому поводу? Есть тестовые приложения, но в этих портянках сложно разбираться.

Собственно что мне делать? Ковырять примеры или есть таки документация?

 , ,

itn
()

Неочевидное поведение scanf()

Драсте.

Я тут жутко затупил, и не могу понять почему именно так работает.

Есть КОД:

#include <stdio.h>

int main(int aegc, char **argv)
{
	int i, s;
	while (1) {
		s = scanf("%d", &i);
		printf("%d: %d\n", s, i);
	}
	return 0;
}

Когда я в stdin пишу не цифры этот код зацикливается и не даёт мне на следующей итерации писать в in.

~$ ./a.out
3
1: 3
w
0: 3
0: 3
0: 3
0: 3
0: 3
.......
.......
.......
^C

Почему он зацикливается?

 

itn
()

realloc(): invalid next size:

Добрый вечер! Есть какой код.

Но он не работает. Не могу понять почему он вываливается, роде всё верно.

Также жду любую конструктивную критику.

./a.out 
*** Error in `./a.out': realloc(): invalid next size: 0x000000000227c030 ***
Аварийный останов (сделан дамп памяти)

 ,

itn
()

В том ли я направлении иду.

Добрый день. Пытаюсь писать «хороший» код. Всё что я понял и прочитал, решил проверить на клеточном автомате.

http://pastebin.ru/VvTJOoyw

Буду благодарен за критику.

 ,

itn
()

Динамическое распределение памяти

Добрый день. Тут прочитал великое писание, и захотел наконец разобраться с указателями и динамическим выделением памяти. Наваял быдлокода. До этого только писал на бедоне. Пожалуйста укажите что я делаю неправильно.

#include <stdio.h>
#include <stdlib.h>

struct T **init(int *size);
void extend(struct T ***arr, int *size);
void freeall(struct T ***arr, int *size);

struct T
{
	int i;
};

int main(int argc, char *argv[])
{
	int arrsize = 5;
	int i;
	struct T **arrt;
	arrt = init(&arrsize);
	for (i = 0; i < arrsize; i++) {
		arrt[i]->i = ((i + 1) * (i + 1));
	}
	for (i = 0; i <= 5; i++) {
		extend(&arrt, &arrsize);
		arrt[arrsize - 1]->i = (arrsize * arrsize);
	}
	for (i = 0; i < arrsize; i++) {
		printf("%d\n", arrt[i]->i);
	}
	freeall(&arrt, &arrsize);
	return 0;
}

struct T **init(int *size)
{
	int i;
	struct T **arrt;
	arrt = calloc(*size, sizeof(int *));
	if (!arrt) {
		fprintf(stderr, "error\n");
		exit(1);
	}
	for (i = 0; i < *size; i++) {
		arrt[i] = calloc(1, sizeof(struct T *));
		if (!(arrt[i])) {
			fprintf(stderr, "error\n");
			exit(1);
		}
	}
	return arrt;
}

void extend(struct T ***arr, int *size)
{
	int oldsize = (*size)++;
	*arr = realloc(*arr, (sizeof(int *) * *size));
	if (!(*arr)) {
		fprintf(stderr, "error\n");
		exit(1);
	}
	(*arr)[oldsize] = calloc(1, sizeof(struct T *));
	if (!((*arr)[oldsize])) {
		fprintf(stderr, "error\n");
		exit(1);
	}
}

void freeall(struct T ***arr, int *size)
{
	int i;
	for (i = 0; i < *size; i++) {
		free((*arr)[i]);
	}
	free((*arr));
}

PS: Извините за табы.

 ,

itn
()

RSS подписка на новые темы