字符双指针程序中的访问冲突
Access violation in char double pointer program
这段代码给了我运行时异常:在第一个strcpy命令Unhandled exception at 0x00401189 in ControlFileChanges.exe: 0xC0000005: Access violation writing location 0xbaadf00d
。
char** withStrings(string s1, string s2, string s3, string s4, string s5)
{
char** pipes;
pipes = (char**) malloc(sizeof(*pipes)*5);
strcpy(pipes[0],s1.c_str());
strcpy(pipes[1],s2.c_str());
strcpy(pipes[2],s3.c_str());
strcpy(pipes[3],s4.c_str());
strcpy(pipes[4],s5.c_str());
return pipes;
}
知道问题可能是什么吗?(这是我用来在实际代码中使用类似逻辑的示例(。
你没有为pipes[0]
、pipes[1]
等分配内存。
由于这是C++而不是 C,您是否考虑过使用 new
而不是 malloc
?或者也许使用vector
或string
?
常数0xbaadf00d
在这里告诉我们很多。它表示您正在使用Microsoft,您已在调试模式下分配了一些堆内存,但未启动它。
您可以看到这一点 - 您已经调用malloc()
来制作char**
,但在调用strcpy
之前没有单独设置每个char*
指针以指向任何有效内容。也就是说,因为char**
是一个指针指向指针,只分配char**
分配指向指针的指针,而不是它们指向的任何指针。
如果可以的话,我建议完全避免使用C字符串。
char** pipes;
- 是一个指针数组,它将存储 5 个字符串的地址。因此,您已在下面的语句中分配了内存来存储 5 个字符串的地址。
pipes = (char**( malloc(sizeof(*pipes(*5(;
在此之后,您必须分配内存来存储每个字符串。因此,请像下面这样更新您的代码。
#define MAX_NO_STRING 5
#define MAX_STR_SIZE 50
pipes = (char**) malloc(sizeof(char*)*MAX_NO_STRING);
for(i = 0; i < MAX_NO_STRING; i++)
{
pipes[i] = (char*)malloc(sizeof(char) * MAX_STR_SIZE);
}
注意:注意空检查 malloc
相关文章:
- 引发未经处理的异常:简单 C++ 程序中的读取访问冲突,动态增加数组长度以存储数字
- 在链接的程序集文件中,我想从 c++ 调用代码访问变量.是否可以在不触发访问冲突的情况下执行此操作?
- Windows C++程序中的访问冲突是否总是立即崩溃
- 在VS2017上调试简单程序时访问冲突(RtlActivateActivationContextUnsafeFast)
- 如何修复<程序名称>中的"<内存位置>未处理的异常。Visual Studio 2017 中的访问冲突写入位置<内存位置>"
- 程序终止C++时访问冲突
- 处理应用程序中的访问冲突
- mfc应用程序结束后,CMainFrame的析构函数调用发生访问冲突
- 简单加密程序集程序-写入内存位置时发生访问冲突
- 调试优先级队列程序时出现访问冲突错误
- 字符双指针程序中的访问冲突
- 基于 SAPI 的应用程序在枚举令牌时引发内存访问冲突
- Wxwidget wxTimer 会导致应用程序关闭时出现随机访问冲突
- 访问冲突 在 C 应用程序中
- 尝试运行非常简单的程序时访问冲突
- 在 .Net 应用程序中调用 C++ DLL 时出现系统访问冲突异常
- 程序.exe中0x010F2F1C时未处理的异常: 0xC0000005:访问冲突读取位置0xCCCCCCD0
- 当我的程序有两个不同的QGLWidget时,访问冲突
- 我尝试访问win32应用程序中的空指针值,但没有发生访问冲突
- “程序中引发的访问冲突(分段错误)”