gpt4 book ai didi

c++ - 散列定义到导致空点异常的数组的第一个元素

转载 作者:行者123 更新时间:2023-11-30 03:38:27 25 4
gpt4 key购买 nike

我有这样的代码:

char* talk[516] = {(char*)1};
#define testValue (*(int*)talk[0])

当调用以下代码行时,我收到一个空指针异常。

testValue = 0; 

这是为什么呢? talk[] 的值不是都初始化了吗?

编辑

我想要做的是,有 516 个数字值(floatint)存储在 char* 数组中. testValue 应指向存储在数组第一个元素中的 int 值。下一个值可能是 #define testValue2(*(float*)talk[1])

最佳答案

对于 char* talk[516] = {0};talk 的所有元素(即 char*)都被初始化为值 0(即空指针)。

对于 char* talk[516] = {(char*)1};talk 的第一个元素初始化为值 1,这不是指针的有效值。 (并且其他元素仍被初始化为空指针。)*(int*)talk[0] 失败,因为您正在尝试将 char* 转换为 int*,指向内存地址1,然后对其进行解引用。

您应该使用有效值初始化元素,例如:

int i;
float f;
void* talk[516] = {&i, &f, /*...*/};

#define testValue (*(int*)talk[0])
#define testValue2 (*(float*)talk[1])

testValue = 1;
testValue2 = 1.5;

<支持>1. 注意如果使用new初始化talk元素,最后需要delete
2. 你也可以使用循环来初始化talk
3. 使用 char* 而不是 void* 令人困惑,IMO。
4. 考虑使用 std::map 而不是宏魔法。

关于c++ - 散列定义到导致空点异常的数组的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39609168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com