LINUX.ORG.RU

История изменений

Исправление LinuxUser, (текущая версия) :

Я тут вот что придумал:

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

extern char etext, edata, end;

int main(int argc, char *argv[]) {
	char *s = "default";

	if (argc > 1)
		s = strdup("new");

	if (s < &etext || &edata < s)
		free(s);
		
	return EXIT_SUCCESS;
}
Кароче, если указатель указывает на какой-то адрес из сегмента с инициализирующими данными, то мы его не трогаем.
Список использованной литературы:
Статья о Data segment в Википедии
man 3 edata

Что думает по этому поводу здешняя публика?

Исходная версия LinuxUser, :

Я тут вот что придумал:

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

extern char etext, edata, end;

int main(int argc, char *argv[]) {
	char *s = "default";

	if (argc > 1)
		s = strdup("new");

	if (s < &etext || &edata < s)
		free(s);
		
	return EXIT_SUCCESS;
}
Кароче, если указатель указывает на какой-то адрес из сегмента с инициализирующими данными, то мы его не трогаем.
Список использованной литературы:
Статья о Data segment в Википедии
man 3 edata