相关疑难解决方法(0)

我应该使用字符串文字来释放char*吗?

我应该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)

c memory memory-management

20
推荐指数
2
解决办法
9196
查看次数

找出指针是指向堆栈,堆还是程序文本?

有没有办法找出指针是否指向以下位置:

  • 堆栈
  • 或者程序(如果是的话,哪个部分例如elf .text)?

此外,这可以移植(Linux 64/32位,OSX和Windows 7+)吗?

跟进:

我不是想弄清楚是不是有些东西已被malloc.

我想有效地将​​void*指针与程序中的函数区分开来,从void*指针到堆栈或堆上的数据.

这适用于用C编写的语言运行库,而不是"普通"C程序.

到目前为止,这个答案是最有用的:检查某些东西是否已被malloced

c pointers

20
推荐指数
1
解决办法
4840
查看次数

标签 统计

c ×2

memory ×1

memory-management ×1

pointers ×1