【发布时间】:2012-10-10 01:07:27
【问题描述】:
下面我有一个构造给定字符串(str)的置换字符串的方法。 我真的不知道为什么,但有时在调试时我会收到以下异常:
Unhandled exception at 0x01282665 in test.exe: 0xC0000005: Access violation
writing location 0x00000000.
尝试在 ret_str (ret_str[l]=elem[0]) 中的索引 0 处分配 ('u') 时
unsigned char* getPermStr(long length,unsigned char* strt,unsigned char* elem){
unsigned char* ret_str;
long l = 0;
ret_str = (unsigned char*) calloc(length,sizeof(unsigned char));
while(l < length){
if(elem < (strt+length-1)){
ret_str[l]=elem[0]; // ACCESS VIOLATION HERE
elem+=1;
}else{
ret_str[l]=elem[0];
elem = strt;
}
l+=1;
}
return ret_str;
}
我不明白为什么会发生访问冲突...我在我的 ret_str 范围内,所以有什么问题? 顺便说一句:字符串 ret_str 在函数调用后被释放。
更新: elem 没有问题。原因是我分配了内存,而堆上没有用于动态分配的内存(由于大量内存泄漏),所以 calloc 返回了一个 NULL 指针。这就是发生错误的原因。
【问题讨论】:
-
如果我是你,我会检查 ret_str 和 elem 是否不为 NULL ;)
-
它告诉你 ret_str 为空。想想为什么会这样。
-
这意味着 calloc 没有分配内存。在这种情况下,Elem 不为 NULL...
-
错误的根本原因很可能在于
elem引用的内存。 -
elem 没有问题。原因是我分配了内存,而堆上没有用于动态分配的内存(由于大量内存泄漏),所以 calloc 返回了一个 NULL 指针。这就是发生错误的原因。
标签: c access-violation assign