我应该char*在使用字符串文字初始化时自由变量吗?对我来说,语法会让我假设它们只是堆栈分配,但这个例子告诉我,它们不是.
#include <stdlib.h>
#include <stdio.h>
static char* globalBuffer;
typedef struct Container {
char* buffer;
} Container;
Container* Container_new(char* buffer) {
Container* container = malloc(sizeof(Container));
container->buffer = buffer;
globalBuffer = buffer;
return container;
}
void Container_print(Container* container) {
if (container->buffer != NULL) {
printf("%s", container->buffer);
printf("\n");
}
else {
printf("Container contains a NULL-buffer.");
}
}
Container* stage() {
Container* container = Container_new("Test-string.");
Container_print(container);
return container;
}
int main() {
Container* container = stage();
Container_print(container);
free(container);
Container_print(container); // I know, …Run Code Online (Sandbox Code Playgroud) 有没有办法找出指针是否指向以下位置:
此外,这可以移植(Linux 64/32位,OSX和Windows 7+)吗?
跟进:
我不是想弄清楚是不是有些东西已被malloc.
我想有效地将void*指针与程序中的函数区分开来,从void*指针到堆栈或堆上的数据.
这适用于用C编写的语言运行库,而不是"普通"C程序.
到目前为止,这个答案是最有用的:检查某些东西是否已被malloced