Liste des Groupes | Revenir à cl c |
Michael S <already5chosen@yahoo.com> writes:
On Tue, 02 Jul 2024 16:32:23 +0100
Ben Bacarisse <ben@bsb.me.uk> wrote:
Michael S <already5chosen@yahoo.com> writes:>
On Mon, 1 Jul 2024 20:09:24 +0300
Michael S <already5chosen@yahoo.com> wrote:
>
As far as I am concerned, the most intriguing feature of tcc is
"Memory and Bound checks". Unfortunately, I was not able to make
it work. It keeps telling me "segmentation error" at first
attempt to dereference argv. Is this feature Linux-only or
32-bit only or some other type of "only" ?
The documentation says it should work on x86_64 in Windows.
Can you post the code so we can compare. With this little program
#include <stdio.h>
void f(int *a, int n)
{
printf("a[%d] == %d\n", n, a[n]);
}
int main(int argc, char **argv)
{
for (int i = 0; i <= argc; i++)
if (argv[i])
printf("argv[%d] == %s\n", i, argv[i]);
else printf("argv[%d] is a null pointer\n", i);
int a[3];
f(a, 3);
}
I get this output:
$ ./a.out 1
argv[0] == ./a.out
argv[1] == 1
argv[2] is a null pointer
004021b9 : at ???: BCHECK: 0x7ffca6719404 is outside of the region
t.c:5: by f
t.c:15: by main
t.c:5: at f: RUNTIME ERROR: invalid memory access
t.c:15: by main
I got plain "Segmentation fault".
>
I it gets me "Segmentation fault" on something as simple as:
>
#include <stdio.h>
int main(int argc, char **argv)
{
printf("%p\n", argv[0]);
return 0;
}
Ah. That looks like a plain "not working" then. (Presumably you get
a reasonable-looking pointer without the -b option). What version of
tcc?
>
Les messages affichés proviennent d'usenet.