allocate memory to Char **
Sylvain Henry
hsyl20 at gmail.com
Tue Apr 29 13:52:30 UTC 2014
To create the [String] as in your example, you just have to write:
let names = ["x"++ show i | i <- [0..w-1]]
varnames <- mallocList names
-Sylvain
2014-04-29 15:40 GMT+02:00 Lamine <mohamadoulamine at gmail.com>:
> Hi Sylvain,
> thank you for your response! I try to use this 2 lines
>
> allocaArray (w*n) $ \var -> do
> xs <- peekArray (w) var
> to code
> char **varnames = ccl_new_array (char *, w);
>
> but it return [CString] not a [String]
>
> On 04/29/2014 01:58 PM, Sylvain Henry wrote:
>
> Hi,
>
> "varnames" is an array of pointers, you cannot allocate it with
> mallocBytes (n*100).
>
> Try something like this (not tested):
>
> mallocList :: [String] -> IO (Ptr CString)
> mallocList xs = newArray =<< forM xs g
> where
> g x = do
> b <- mallocBytes 100
> pokeCString b x 99
> return b
>
> pokeCString :: CString -> String -> Int -> IO ()
> pokeCString dst value maxLen = withCStringLen (take maxLen value) $
> uncurry (copyArray dst)
>
> -Sylvain
>
>
> 2014-04-29 13:11 GMT+02:00 Lamine <mohamadoulamine at gmail.com>:
>
>>
>> Hi,
>>
>> I want to do write this C code in haskell code, but i have some pb:
>>
>> int w ;
>> char **varnames = ccl_new_array (char *, w);
>>
>> int i;
>> for (i = 0; i < w; i++)
>> {
>> varnames[i] = ccl_new_array (char, 100);
>> sprintf (varnames[i], "x%d", i);
>> }
>>
>> I try this code unsing mallocList to (http://lpaste.net/report/712):
>> mallocList :: [CString] -> IO (Ptr CString)
>> mallocList xs = do let n = Prelude.length xs
>> p <- mallocBytes (n*100)
>> forM_ (Prelude.zip [0..] xs)
>> (uncurry (pokeByteOff p))
>> return p
>>
>> let n = sizeOf(undefined :: CString)
>> allocaArray w $ \var -> do
>> xs <- peekArray (w*n) var
>> varnames <- mallocList xs
>>
>> I have an error "segmentation fault(core dumped)".
>> can someone please help me? Thank you.
>>
>> Lamine
>> _______________________________________________
>> FFI mailing list
>> FFI at haskell.org
>> http://www.haskell.org/mailman/listinfo/ffi
>>
>
>
>
> --
> « Chaque génération doit, dans un état relatif de captivité, découvrir sa
> mission. Elle a le choix de la remplir ou la trahir». Frantz Fanon
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/ffi/attachments/20140429/a35c934f/attachment.html>
More information about the FFI
mailing list