在C中,文字字符串地址是否总是大于任何分配的字符串地址?

Sam*_*rch 3 c string memory-management

我试图区分文字字符串与分配的字符串,所以我不小心尝试free()文字字符串,这将导致段错误.

我可能尝试free()文字字符串的原因涉及一个可以嵌入的strcat()包装器: strcatex("My name ", strcatex("is ", strMyName));

无论原因如何,请考虑:

void* mallocex(int intBytes) 
{
    void* newPtr;

    newPtr = malloc(intBytes);

    if(newPtr == 0)
        return 0;
    else if(newPtr > maxPointer)
        maxPointer = newPtr;

    return newPtr;
}
Run Code Online (Sandbox Code Playgroud)

int SafeFree(void **ptr)
{
    if((unsigned long) ptr > (unsigned long) maxPointer) 
        return 0;
    else
        free(*ptr);

    return 1;
}
Run Code Online (Sandbox Code Playgroud)

示例使用:

char *newString;
newString = (char*) mallocex(12);

strcpy(newString, "Example one");

SafeFree(&newString);
SafeFree("Example two");
Run Code Online (Sandbox Code Playgroud)

无论我的堆有多大,这总能工作吗?

Alo*_*ave 5

没有这样的保证不依赖它.
字符串文字在只读实现定义区域的某处分配内存,无法以可移植的方式知道它将是什么,因此您不应对其做出任何假设.

  • @SamPorch:使用有效指针调用`free()`的责任在于调用者所以我发现你的方法过度杀戮防御性编程. (4认同)