簡體   English   中英

數組中第一個索引的C未知訪問沖突

[英]C unknown access violation at first index in array

下面,我有一個構造給定字符串(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指針。 這就是為什么發生錯誤。

您需要檢查elem是否為空。 如果為null,則您的函數應返回錯誤代碼。

ret_str = (unsigned char*) calloc(length,sizeof(unsigned char)); 將此行更改為

ret_str = malloc(length * sizeof(unsigned char));
if(ret_str == NULL){ return "" ;}
//--whatever
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; 
    }

還要確保elem是可訪問的。 可能是,elem沒有初始化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM