pointers相关内容

指针初始化导致分段错误

我写了一个C程序如下: 案例 1 int *a;/* 指针变量声明 */诠释 b;/* 实际变量声明 */*a=11;a=&b;/* 将b的地址存储在指针变量中*/ 运行程序时出现分段错误. 我把代码改成如下: 案例 2 int *a;/* 指针变量声明 */诠释 b;/* 实际变量声明 */a=&b;/* 将b的地址存储在指针变量中*/*a=11; 现在一切正常. ..
发布时间:2022-01-12 15:36:35 其他开发

崩溃或“分段错误";当数据被复制/扫描/读取到未初始化的指针时

此问题旨在作为所有常见问题的参考: 当我将数据复制/扫描到未初始化指针指向的地址时,为什么会出现神秘的崩溃或“分段错误"? 例如: char* ptr;strcpy(ptr,“你好世界");//在这里崩溃! 或 char* ptr;scanf("%s", ptr);//在这里崩溃! 解决方案 指针是一种特殊类型的变量,它只能包含另一个变量的地址.它不能包含任何数据.您不能“将 ..
发布时间:2022-01-12 15:29:01 其他开发

有没有办法检查指针是否悬空?

我有一个代码,我使用指针来访问一些数据块.在极少数情况下,数据块的一些成员是空的,因此指针变得悬空.事实上,我得到了正确的指针,但是当试图用指针做某事时程序崩溃了. 通常的建议是避免这种用法.但遗憾的是,我使用的框架要求我使用这种类型的数据访问方法. 有没有办法在对指针进行任何操作之前“检查"指针是否无效?显然,检查指针是否不等于 NULL 不起作用.我也试过这个: 试试{CStri ..
发布时间:2022-01-12 14:50:45 C/C++开发

C/C++ 字符指针崩溃

假设一个返回固定“随机文本"字符串的函数写成这样 char *Function1(){返回“一些文本";} 如果程序不小心试图改变doing的值,那么程序可能会崩溃 Function1()[1]='a'; 函数调用之后的方括号是什么,试图这样做会导致程序崩溃?如果您熟悉这一点,任何解释将不胜感激! 解决方案 您在函数中返回的字符串通常存储在进程的只读部分中.尝试修改它会导致访问冲突 ..
发布时间:2022-01-12 11:19:28 C/C++开发

操作系统的位数是否重要,或者只是我需要担心的应用程序?

一些假设:(如果错了,请纠正我) 忽略 16 位内容,VBA 可以在 32 位或 64 位 Office 主机上运行.64 位 Office 只能在 64 位操作系统上运行,而您可以在 32 或 64 位版本的 Windows/macOS/其他操作系统上运行 32 位 Office. 从 VBA7 开始,我们有 LongPtr 类型,它在 32 位 Office 上变为 Long (# ..

当我们在 C 中取消引用 NULL 指针时,操作系统会发生什么?

假设有一个指针,我们用 NULL 初始化它. int* ptr = NULL;*ptr = 10; 现在,程序将崩溃,因为 ptr 没有指向任何地址,我们正在为那个分配一个值,这是一个无效的访问.那么,问题是,操作系统内部发生了什么?是否发生页面错误/分段错误?内核甚至会在页表中搜索吗?还是在此之前发生崩溃? 我知道我不会在任何程序中做这样的事情,但这只是想知道在这种情况下操作系统或编译 ..
发布时间:2022-01-11 22:44:37 其他开发

如何在头文件和c文件中声明函数指针?

我对如何在头文件中声明函数指针有点困惑.我想在 main 和一个名为 menus.c 的文件中使用它,并在我假设的 menus.h 中声明它.我们要初始化指向某个函数. 看起来像这样: void (*current_menu)(int); 我们在 menus.c、menus.h 和 main 中写了什么? 解决方案 函数指针仍然是指针,也就是说它仍然是变量. 如果您希望一个 ..
发布时间:2022-01-11 16:49:05 其他开发

什么是 UnsafeMutablePointer<Void>?如何修改底层内存?

我正在尝试使用 SpriteKit 的 SKMutableTexture 类,但我不知道如何使用 UnsafeMutablePointer.我有一个模糊的想法,它是指向内存中连续字节数据的指针.但是我该如何更新呢?这在代码中实际上会是什么样子? 编辑 这是一个可以使用的基本代码示例.我怎样才能让它做一些简单的事情,比如在屏幕上创建一个红色方块? let tex = SKMu ..
发布时间:2022-01-11 11:57:19 移动开发

将指针数组复制到设备内存并返回(CUDA)

我正在尝试在我的玩具示例中使用 cublas 函数 cublasSgemmBatched.在本例中,我首先分配二维数组:h_AA, h_BB 大小为 [6][5] 和 h_CC 的大小为 [6][1].之后我将它复制到设备,执行 cublasSgemmBatched 并尝试将数组 d_CC 复制回主机数组 h_CC.但是,我在设备到主机复制时遇到错误 (cudaErrorLaunchFailure ..
发布时间:2022-01-10 15:55:34 其他开发

如何使用 cudaMalloc/cudaMemcpy 作为指向包含指针的结构的指针?

我浏览了这个网站和其他网站,但没有任何效果.我正在针对我的具体案例发布一个问题. 我有一堆矩阵,目标是使用内核让 GPU 对所有矩阵执行相同的操作.我很确定我可以让内核工作,但我不能让 cudaMalloc/cudaMemcpy 工作. 我有一个指向 Matrix 结构的指针,它有一个名为 elements 的成员,它指向一些浮点数.我可以很好地完成所有非 cuda malloc. ..
发布时间:2022-01-10 15:37:51 其他开发

为什么 cudaMalloc() 使用指向指针的指针?

例如cudaMalloc((void**)&device_array, num_bytes); 这个问题已经问过了,回复是“因为 cudaMalloc 返回错误代码",但我不明白 - 双指针与返回错误代码有什么关系?为什么一个简单的指针不能完成这项工作? 如果我写 cudaError_t catch_status;catch_status = cudaMalloc((void**)& ..
发布时间:2022-01-10 15:15:53 C/C++开发

从指针或引用中获取迭代器

我想知道是否可以通过仅访问容器内的对象来获取容器内对象的迭代器(例如 std::vector)容器,例如通过引用(这意味着我们可以使用 & 运算符访问指向它的指针).例如,通常我们将迭代器声明为 std::vector::iterator = vec.begin(); 或 std::vector::iterator = next(vec.begin(), idx); 但是在第一个示例中,我 ..
发布时间:2022-01-10 15:05:58 C/C++开发

为什么要与“end()"比较?迭代器合法吗?

根据 C++ 标准 (3.7.3.2/4) 使用(不仅是取消引用,还包括复制、强制转换等)无效指针是未定义的行为(如有疑问,请参阅 这个问题).现在遍历 STL 容器的典型代码如下所示: std::vector遍历;//填充向量for( std::vector::iterator it = toTraverse.begin(); it != toTraverse.end(); ++it ..
发布时间:2022-01-10 14:56:36 C/C++开发

在c ++中返回指向向量元素的指针

我在全局范围内有一个 myObjects 向量.我有一个方法,它使用 std::vector::const_iterator 来遍历向量,并进行一些比较以找到特定元素.找到所需元素后,我希望能够返回指向它的指针(该向量存在于全局范围内). 如果我返回&iterator,我是返回迭代器的地址还是迭代器指向的地址? 我是否需要将 const_iterator 转换回一个 ..
发布时间:2022-01-10 14:38:10 C/C++开发

在 STL 迭代器的上下文中,什么是奇异值和非奇异值?

C++ 标准 (2003) 的第 24.1/5 节内容如下: 就像一个指向数组的常规指针保证有一个指针指向最后一个元素的值数组的,所以对于任何迭代器类型有一个迭代器值指向过去 a 的最后一个元素对应的容器.这些值被称为过去的值.价值观迭代器 i 的表达式 *i 被定义被调用可取消引用.图书馆从不假设过去的值是可取消引用.迭代器也可以具有不存在的奇异值与任何容器相关联.[示例:在声明一个未初始 ..
发布时间:2022-01-10 14:35:16 C/C++开发

非取消引用的迭代器是否超过了“一个过去的末端"?数组未定义行为的迭代器?

鉴于 int foo[] = {0, 1, 2, 3}; 我想知道指向“一个过去的末端"的迭代器是否无效.例如:auto bar = cend(foo) + 1; 在 Stack 中有大量的抱怨和警告说这是“未定义的行为" 这样的溢出问题:c++ iterator + integer when past-end-iterator 的结果是什么? 不幸的是,唯一的来源是挥手. 我在购买时 ..
发布时间:2022-01-10 14:29:28 C/C++开发

对于具有线性存储的容器,可以使用原始指针而不是具有 STL 算法的迭代器吗?

我有一个自定义向量容器,它在内部存储项目一个线性数组.昨晚,我试图为我的类实现自定义迭代器,以便能够将它们与 STL 算法一起使用.我取得了一些成功,您可以在这里看到: 带有自定义迭代器的实时示例 这样做时,我发现我只能将原始指针传递给 STL 算法,它们似乎工作正常.这是没有任何迭代器的示例: #include #include #includ ..
发布时间:2022-01-10 14:22:39 C/C++开发

查找 cv::Mat 的最大值

我正在尝试查找 cv::Mat 的最大像素值. 问题:*maxValue 总是返回 0. 来自 这个 S.O.线程,我知道 'max_element 返回迭代器,而不是值.这就是我使用 *maxValue' 的原因 cv::Mat imageMatrix;双 sigmaX = 0.0;int ddepth = CV_16S;//ddepth – 目标图像的所需深度cv::Gauss ..
发布时间:2022-01-09 18:39:51 C/C++开发

Coldfusion 组件指针

我正在构建的 Coldfusion 组件存在问题.好吧,我不确定这是否是一个问题或事情应该如何运作,但这似乎很奇怪.首先,我为组件的 init 函数设置参数并调用组件.但是,如果我在调用后更改其中一个参数,它也会更改组件中保存的值.这是正确的吗? 我不确定我是否解释得很好.这是一些伪代码: 测试: ..
发布时间:2022-01-09 14:45:20 其他开发