我正在为一个数组分配内存,但我正在移动指针向前指向一点点.访问元素工作正常.它开始产生释放已分配内存的问题.Malloc抱怨从未分配被释放的指针.这个简化的代码可以重现这个问题:
int *pointer = malloc(sizeof(int)) + 1;
free(pointer - 1);
Run Code Online (Sandbox Code Playgroud)
我开始尝试,发现代码的这种轻微变化可以工作.
int *pointer = malloc(sizeof(int));
pointer += 1;
free(pointer - 1);
Run Code Online (Sandbox Code Playgroud)
什么是+ =做不同只是添加1指针malloc返回一行?
我正在使用GLFW学习OpenGL,并且当时对makefile没有很好的理解.我有OpenGL工作,但我决定更多地学习makefile.经过很多网站,时间和反复试验,我想出了这个:
EXENAME = "OpenGL Demo"
CC = gcc
SRCS = ../src/OpenGLDemo.c
OBJS = $(SRCS: .c = .o)
CFLAGS = -Wall -g -c
LIBS = -L./libs -lglfw3 C:/Windows/SysWOW64/opengl32.dll C:/Windows/SysWOW64/glu32.dll
all: opengldemo exe
exe: $(OBJS)
$(CC) $(OBJS) -o $(EXENAME) $(LIBS)
opengldemo: ../src/OpenGLDemo.c
$(CC) $(CFLAGS) ../src/OpenGLDemo.c
clean:
rm -f $(EXENAME)
rebuild: clean all
Run Code Online (Sandbox Code Playgroud)
但是,当我编译时,它在尝试构建可执行文件时会出现此错误:
collect2: error: ld terminated with signal 11 [Segmentation fault], core dumped
makefile:11: recipe for target 'exe' failed
make: *** [exe] Error 1
Run Code Online (Sandbox Code Playgroud)
它确实构建了一个可执行文件,但我的计算机说它无法运行它.我尝试搜索互联网,发现包含此错误的gcc错误报告.我正在做一些愚蠢的事情来解决这个错误.如何修复此错误,这是什么意思?
编辑:完整输出:
make
gcc -Wall -g -c …Run Code Online (Sandbox Code Playgroud) 我正在学习如何用 C 语言制作 Windows 应用程序,并尝试使用SetPixel(HDC hDC, int x, int y, COLORREF crColor).
在我添加该行之前,我从未遇到过编译错误。当然,我确实包含了 windows.h 。我四处寻找答案,但一无所获。
它给出了错误" undefined reference to _imp__SetPixel@16' "
为了编译,我使用命令" gcc -g -Wall -o $(EXENAME) $(SRC) "。没有花哨的 IDE。如果有人能告诉我为什么是imp_和 @16 部分,请也告诉我。我以前从未见过这样的情况。
编辑:我在这个网站上找到了 _imp 的含义。