输出字符时出现分段错误**
Segmentation fault when outputting a char**
这是如何输出字符**的后续内容。
使用代码:
char** foo = magic() // Pretend magic() is a function that returns a char**
for (char** ptr = foo; ptr != NULL; ptr++)
{
std::cout << *ptr << "n";
std::cout << ptr << "nn";
}
我有一个分割错误。我正试图打印出字符**的每一个元素。更多细节请参阅我正在跟进的问题。
这是我从valgrind --leak-check=yes
:得到的输出
==10274== Thread 1:
==10274== Invalid read of size 8
==10274== at 0x88DF010: ??? (in /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37.37.6)
==10274== by 0x8A436A8: ??? (in /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37.37.6)
==10274== by 0x8A47DB7: ??? (in /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37.37.6)
==10274== by 0x88DA1D0: ??? (in /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37.37.6)
==10274== by 0x8727045: ??? (in /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37.37.6)
==10274== by 0x882EDFD: ??? (in /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37.37.6)
==10274== by 0x891D7E1: ??? (in /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37.37.6)
==10274== by 0x88284AE: ??? (in /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37.37.6)
==10274== by 0x88299FA: ??? (in /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37.37.6)
==10274== by 0x882A6C9: ??? (in /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37.37.6)
==10274== by 0xBF2FCF4: WTF::RunLoop::performWork() (in /usr/lib/x86_64-linux-gnu/libjavascriptcoregtk-4.0.so.18.13.7)
==10274== by 0xBF7BF68: ??? (in /usr/lib/x86_64-linux-gnu/libjavascriptcoregtk-4.0.so.18.13.7)
==10274== Address 0x38 is not stack'd, malloc'd or (recently) free'd
==10274==
==10274==
==10274== Process terminating with default action of signal 11 (SIGSEGV)
==10274== Access not within mapped region at address 0x38
==10274== at 0x88DF010: ??? (in /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37.37.6)
==10274== by 0x8A436A8: ??? (in /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37.37.6)
==10274== by 0x8A47DB7: ??? (in /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37.37.6)
==10274== by 0x88DA1D0: ??? (in /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37.37.6)
==10274== by 0x8727045: ??? (in /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37.37.6)
==10274== by 0x882EDFD: ??? (in /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37.37.6)
==10274== by 0x891D7E1: ??? (in /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37.37.6)
==10274== by 0x88284AE: ??? (in /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37.37.6)
==10274== by 0x88299FA: ??? (in /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37.37.6)
==10274== by 0x882A6C9: ??? (in /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37.37.6)
==10274== by 0xBF2FCF4: WTF::RunLoop::performWork() (in /usr/lib/x86_64-linux-gnu/libjavascriptcoregtk-4.0.so.18.13.7)
==10274== by 0xBF7BF68: ??? (in /usr/lib/x86_64-linux-gnu/libjavascriptcoregtk-4.0.so.18.13.7)
==10274== If you believe this happened as a result of a stack
==10274== overflow in your program's main thread (unlikely but
==10274== possible), you can try to increase the size of the
==10274== main thread stack using the --main-stacksize= flag.
==10274== The main thread stack size used in this run was 8388608.
==10274==
我该怎么解决这个问题?
@WhozCraig在评论中回答了这个问题:
char** ptr = foo; ptr != NULL; ptr++
应该是char** ptr = foo; *ptr != NULL; ptr++
。请注意条件测试中应用的取消频率。
我需要检查值是否为null,而不是位置。
唯一合乎逻辑的解释是您的魔术函数中的char**数组不会以NULL终止。
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?