相关疑难解决方法(0)

在GCC中对齐malloc()?

GCC或glibc中是否有任何标准化函数在对齐指针处分配内存块?像MSVC中的_align_malloc()一样?

c malloc gcc

36
推荐指数
5
解决办法
7万
查看次数

指针地址跨越各种平台

在C中编码时的常见情况是编写返回指针的函数.如果在运行期间写入函数内发生某些错误,NULL可能会返回以指示错误.NULL只是特殊的内存地址0x0,除了表示特殊条件的出现之外,它从不用于任何东西.

我的问题是,是否有任何其他特殊的内存地址永远不会用于用户态应用程序数据?

我想知道这个的原因是因为它可以有效地用于错误处理.考虑一下:

#include <stdlib.h>
#include <stdio.h>

#define ERROR_NULL 0x0
#define ERROR_ZERO 0x1

int *example(int *a) {
    if (*a < 0)
        return ERROR_NULL;
    if (*a == 0)
        return (void *) ERROR_ZERO;
    return a;
}

int main(int argc, char **argv) {
    if (argc != 2) return -1;
    int *result;
    int a = atoi(argv[1]);
    switch ((int) (result = example(&a))) {
        case ERROR_NULL:
            printf("Below zero!\n");
            break;

        case ERROR_ZERO:
            printf("Is zero!\n");
            break;

        default:
            printf("Is %d!\n", *result);
            break;
    }
    return 0; …
Run Code Online (Sandbox Code Playgroud)

c error-handling pointers void-pointers memory-address

0
推荐指数
1
解决办法
260
查看次数